我正在尝试使用for each循环从每台计算机检索注册表值,然后将该值输出到csv中的文件夹。 那部分工作正常。我遇到问题的部分是PowerShell连接到远程计算机。
这只在内部运行 我拥有所有工作站的管理员权限 防火墙配置为允许所有流量通过
当我运行此脚本时,我会为它尝试连接的每个工作站收到此错误:
Enter-PSSession:连接到远程服务器workstationX失败了 以下错误消息:WinRM无法完成操作。 验证指定的计算机名称是否有效,即计算机 可以通过网络访问,并且防火墙例外 WinRM服务已启用,允许从此计算机进行访问。通过 默认情况下,公共配置文件限制的WinRM防火墙例外 访问同一本地子网内的远程计算机。更多 信息,请参阅about_Remote_Troubleshooting帮助主题。在 C:\ Users \ Rich_Ellis \ Desktop \ O365 \ O365Channels \ O365Channel.ps1:5 char:2 + {Enter-PSSession -ComputerName $ Computer + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo:InvalidArgument:(workstationX:String)[Enter-PSSession],PSRemotingTransportException + FullyQualifiedErrorId:CreateRemoteRunspaceFailed
我的脚本是:
$Computers = Get-Content "C:\Users\Rich_Ellis\Desktop\O365\O365Channels\computers.txt"
foreach ($Computer in $Computers)
{Enter-PSSession -ComputerName $Computer
$key = 'HKLM:\SOFTWARE\Microsoft\Office\CLickToRun\Configuration'
(Get-ItemProperty -Path $key -Name CDNBaseUrl).CDNBaseUrl | Export-CSV -path "\\s00itstorage\OfficeChannel\$($env:COMPUTERNAME)-O365Channel03292018.csv"}
任何帮助将不胜感激。 TIA
答案 0 :(得分:0)
Molding a previous answer to your use-case:
$HKEY_LOCAL_MACHINE = 2147483650
$GwmiArgs = @{
Class = 'StdRegProv'
Namespace = 'Root\Default'
List = $True
}
ForEach ($Computer in @(Get-Content -Path 'C:\Users\Rich_Ellis\Desktop\O365\O365Channels\computers.txt'))
{
$GwmiArgs['ComputerName'] = $Computer
$Registry = Get-WmiObject @GwmiArgs
$Registry.GetStringValue(
$HKEY_LOCAL_MACHINE,
'SOFTWARE\Microsoft\Office\ClickToRun\Configuration',
'CDNBaseUrl'
).sValue | Export-CSV -Path "\\s00itstorage\OfficeChannel\$Computer-O365Channel03292018.csv"
}
这使用wmi而不是psremoting来轮询可能更容易依赖的信息,因为它已经在大多数PC上配置/启用,并且由于DCOM / RPC可以利用IP地址(psremoting默认只支持kerberos)
使用Invoke-WmiMethod
代替为每个民意调查创建一个wmi对象,可以进一步改进此解决方案,但我还没有完成这项工作!