为什么通过Ansible(远程WinRM)执行代码时Windows代理丢失?
在自动化Windows(2012R2和2016)构建过程中,我发现即使我通过netsh设置了系统范围的代理,我仍然必须为IE设置HKCU值,因为如果不设置这些值,某些命令将无法工作。我必须打开IE并访问一个站点,任何站点,来初始化那些设置,这很烦人 我能够找到一些可以“初始化”IE代理设置的PowerShell代码,因此我不必打开IE并访问站点,如下所示:为什么通过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
$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代理注册表项将被删除并重置回默认值。因此,通过脚本进行操作的顺序是:
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代理)。有人有其他想法吗?