Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么通过Ansible(远程WinRM)执行代码时Windows代理丢失?_Windows_Powershell_Internet Explorer_Proxy_Ansible - Fatal编程技术网

为什么通过Ansible(远程WinRM)执行代码时Windows代理丢失?

为什么通过Ansible(远程WinRM)执行代码时Windows代理丢失?,windows,powershell,internet-explorer,proxy,ansible,Windows,Powershell,Internet Explorer,Proxy,Ansible,在自动化Windows(2012R2和2016)构建过程中,我发现即使我通过netsh设置了系统范围的代理,我仍然必须为IE设置HKCU值,因为如果不设置这些值,某些命令将无法工作。我必须打开IE并访问一个站点,任何站点,来初始化那些设置,这很烦人 我能够找到一些可以“初始化”IE代理设置的PowerShell代码,因此我不必打开IE并访问站点,如下所示: $Source=@" [DllImport("wininet.dll")] public static extern bool Intern

在自动化Windows(2012R2和2016)构建过程中,我发现即使我通过netsh设置了系统范围的代理,我仍然必须为IE设置HKCU值,因为如果不设置这些值,某些命令将无法工作。我必须打开IE并访问一个站点,任何站点,来初始化那些设置,这很烦人

我能够找到一些可以“初始化”IE代理设置的PowerShell代码,因此我不必打开IE并访问站点,如下所示:

$Source=@"
[DllImport("wininet.dll")]
public static extern bool InternetSetOption(int hInternet, int dwOption, int lpBuffer, int dwBufferLength);
"@
$wininet = Add-Type -memberDefinition $Source -passthru -name InternetSettings
$wininet::InternetSetOption([IntPtr]::Zero, 95, [IntPtr]::Zero, 0)|out-null
$wininet::InternetSetOption([IntPtr]::Zero, 37, [IntPtr]::Zero, 0)|out-null
以上代码来自(谢谢!)

当通过RDP会话手动执行上述代码时,效果非常好。我正确地设置了IE代理值,运行了上面的代码,然后我可以做任何我想做的事情——一切正常。需要IE设置的命令工作正常

我一直在尝试使用Ansible和SSM(在AWS中)等工具通过远程WinRM运行更多代码。当我这么做的时候,奇怪的事情就会发生

具体来说,IE代理注册表项将被删除并重置回默认值。因此,通过脚本进行操作的顺序是:

  • 通过Ansible或SSM调用的脚本将IE代理值写入注册表
  • 运行上面列出的初始化代理代码
  • #1中的IE值已消失
  • 我不知道为什么注册表值会被删除。我100%确定它们会被删除-我可以在初始化代理命令之前和之后编写一个reg查询脚本-在命令存在之前,在命令不存在之后。当我在RDP会话中在服务器上手动运行相同的脚本时,不会发生这种情况——也就是说,proxy命令不会删除条目

    我已经在Ansible和SSM中复制了这一点,它们都使用PowerShell和WinRM来运行命令。脚本驻留在实际的服务器上,Ansible/SSM告诉系统执行脚本

    我已经证实,在脚本的Ansible执行期间,HKCU确实存在

    因为IE值被删除,所以当执行以下需要IE值的命令时,initialize命令对我没有好处。这些命令失败,错误如下:

    PackageManager\Install软件包:找不到与指定的 搜索条件和模块名称“”

    我正在运行的命令(失败)只是安装模块命令,如下所示:

    Install-Module -Name PSWindowsUpdate -Proxy http://proxy.foo.com:80 -Confirm:$false -Force
    Install-Module -Name PowerShellGet -Proxy http://proxy.foo.com:80 -Confirm:$false -Force
    
    有人知道当我通过Ansible或SSM运行上面的代码时,为什么IE代理注册表值会被删除吗?所讨论的代理值为:

    “HKCU\Software\Microsoft\Windows\CurrentVersion\Internet设置\ProxyEnable”-将重置为0

    “HKCU\Software\Microsoft\Windows\CurrentVersion\Internet设置\ProxyServer”-此项被删除


    “HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings\ProxyOverride”-此被删除时出现了相同的问题。发现该死的ie巫师是根本原因。 在访问ie组件之前,您必须向注册表添加以下项…:

        desc: "Remove IE 11 first run Wizard"
        path: "HKLM:\\Software\\Policies\\Microsoft\\Internet Explorer\\Main"
        name: "DisableFirstRunCustomize"
        data: "1"
        type: "dword"
    

    HKCU
    设置存储在用户配置文件中,我怀疑这与远程处理相结合可能是问题所在。您是否尝试过设置
    ProxySettingsPerUser=0
    并在
    HKLM
    中配置代理设置?详细信息:。@beatcracker,谢谢你的代理链接,它有很好的信息。不幸的是,即使是HKLM系统也被Jason的PowerShell代码擦除了。我在检查之前/之后做了相同的操作,果然,ProxyEnable被重置回0x0,ProxyServer被删除,ProxyOverride被删除。唉……我决定尝试使用psexec运行IE来进行代理初始化(而不是Jason的PowerShell代码)——这对初始化有效,但也会清除设置。在这一点上,在RDP会话中完成所有这些工作似乎都非常有效。但是,当通过WinRM(Ansible或AWS SSM)执行此操作时,代理初始化会清除这些设置。运行IE将擦除设置是有意义的,因为这样做和运行PS代码做完全相同的事情(初始化wininet代理)。有人有其他想法吗?