Powershell – 查询远程registry键值并生成文本文件IF值等于1

第一次发布。 彻底享受网站和所有停止帮助的人才。

我已经把PowerShell的一些function放在一起,远程查询存储在.csv文件中的计算机列表,查找registry值。 如果registry项的值等于'1',那么脚本应该使用机器的名称作为文本文件的名称创build一个文本文件。

一切都很好。 脚本运行愉快没有任何错误。 问题是,当我返回并远程检查目标registry值时,我发现该值不是1.该脚本只是为.csv中的每一行创build一个文件。

我究竟做错了什么?

编辑***我发现了一个问题,我在registrypath的$ keyvariables中input错误。 7/17/2013 2:21p

$File = Import-Csv 'c:\temp\machines.csv' foreach ($line in $file) { $machinename = $line.machinename trap [Exception] {continue} $reg = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey("LocalMachine",$MachineName) $key = "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\WinLogon" $regkey = "" $regkey = $reg.opensubkey($key) $keyValue = "" $keyValue = $regKey.GetValue('AutoAdminLogon') if ($keyValue = "1") { try { $textFile = New-Item -Path "c:\temp\autologin" -Name $MachineName -ItemType "File" } catch { $msg = $_ $msg } } $Results = $MachineName , $keyValue Write-host $Results #Output Below Here: } 

Solutions Collecting From Web of "Powershell – 查询远程registry键值并生成文本文件IF值等于1"

在PowerShell中=是一个赋值运算符,而不是比较运算符。 改变这一行:

 if ($keyValue = "1") 

进入这个:

 if ($keyValue -eq "1") 

有关更多信息,请参阅Get-Help about_Operators

顺便说一句,你这样做太复杂了。 像这样的东西应该足够了:

 $keyname = 'SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\WinLogon' Import-Csv 'C:\temp\machines.csv' | % { $reg = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey("LocalMachine", $_.machinename) $key = $reg.OpenSubkey($keyname) $value = $key.GetValue('AutoAdminLogon') if ($value -eq "1") { $filename = Join-Path "c:\temp\autologin" $_.machinename try { touch $filename $textFile = Get-Item $filename } catch { $_ } } Write-Host ($_.machinename , $value) }