【问题标题】:Powershell remoting and page filePowershell 远程处理和页面文件
【发布时间】:2012-08-22 15:51:19
【问题描述】:

我编写了一个连接到远程机器的 powershell 脚本,目的是在该机器上执行软件部署。基本上,它连接、映射驱动器、将部署从映射驱动器复制到目标机器,然后执行 perl 脚本来安装部署。如果我手动执行这些步骤,一切正常。当我尝试使用我的脚本时,远程机器上的 perl 脚本失败,提示“页面文件太小,无法完成此操作”。

有人可以解释我在远程操作时需要考虑的注意事项吗?我尝试过监控内存使用情况,但没有发现任何异常。页面文件是操作系统范围还是我的脚本在连接时应该设置某种类型的每个用户配置?

如果需要,我可以发布我的脚本的 sn-ps,但该脚本有 426 行,所以我认为将其全部发布会让人不知所措。

【问题讨论】:

    标签: powershell remoting pagefile


    【解决方案1】:

    我发现远程 shell 的管理方式与登录到盒子并执行 powershell 会话不同。我必须使用以下命令之一来增加可用的最大内存量:

    Set-Item WSMan:\localhost\Shell\MaxMemoryPerShellMB 1024
    
    winrm set winrm/config @{MaxMemoryPerShellMB="1024"}
    

    默认为 150MB,在我的情况下并没有削减它。我不能说我推荐1GB,我只是一个开发者。我尝试提高它,直到找到适合我的方法。

    【讨论】:

    • 可以远程配置吗?
    • 假设您应该能够执行适当的权限:Invoke-Command -ComputerName YOUR_COMPUTER_NAME { Set-Item WSMan:\localhost\Shell\MaxMemoryPerShellMB 1024 }
    • 没有启用 UAC,用户有权以提升的权限运行命令。还是不行。猜猜我必须创建自己的 C# 实用程序,因为即使它工作我也无法捕获输出。
    • 我知道在远程执行脚本之前,我必须在所有机器上本地发出“Set-ExecutionPolicy unrestricted”命令,也许这是缺少的部分?当你尝试运行你的命令时它给出了什么错误?
    • 我尝试了以下代码,但远程安装网络框架时仍然出错。
    【解决方案2】:

    我尝试使用此代码以管理员身份运行 puppet 客户端,但框架仍然抱怨“拒绝访问”

    Exe (C:\Users\lmo0\AppData\Local\Temp\Microsoft .NET Framework 4 Setup_4.0.30319\Windows6.1-KB958488-v6001-x64.msu) 失败,出现 0x5 - 访问被拒绝。 .

    using System;
    using System.Diagnostics;
    
    namespace RunAsAdmin
    {
        class Program
        {
            static void Main(string[] args)
            {
                Process proc = new Process();
    
                Process p = new Process();
                p.StartInfo.FileName = @"powershell.exe";
                p.StartInfo.Arguments = @"invoke-command -computername vavt-pmo-sbx24 -ScriptBlock {&'C:\Program Files (x86)\Puppet Labs\Puppet\bin\puppet.bat' agent --test --no-daemonize --verbose --logdest console}";
                p.StartInfo.Verb = "runas";
                p.StartInfo.UseShellExecute = false;
                p.StartInfo.RedirectStandardOutput = true;
                p.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
    
                p.Start();
    
                while (p.HasExited == false) {
                   Console.WriteLine(p.StandardOutput.ReadLine());
                }
                Console.ReadLine();
                p.WaitForExit();
                p.Close();
    
    
            }
        }
    }
    

    【讨论】:

    • 你能在 .net 代码之外运行 powershell 命令吗?您将要将此作为一个单独的问题发布。其他堆栈用户不会看到此内容,因为它是作为已接受答案的帖子的答案发布的。
    • 没有 wat 可以在 cmets 上添加代码,这就是我发布答案的原因。还有其他方式发布代码吗?
    • 代码不能放在 cmets 中。如果您将此作为自己的问题发布,您将能够发布代码。然后其他人也会看到它,这将使您受益。
    猜你喜欢
    • 2017-09-21
    • 1970-01-01
    • 2010-12-14
    • 1970-01-01
    • 1970-01-01
    • 2013-02-18
    • 2023-03-19
    • 1970-01-01
    • 2012-02-10
    相关资源
    最近更新 更多