在IF语句中更改注册表二进制值

时间:2015-04-21 07:11:51

标签: powershell if-statement binary outlook

我对此IF声明有疑问。

尝试更改OUTLOOK 2013主题。它工作正常,但正确的写主机不工作或者没有正确读取值。

#OUTLOOK
Push-Location
    Set-Location (Join-Path 'HKCU:\Software\Microsoft\Office\15.0\Common\Roaming\Identities' -ChildPath '*companyname.com*\Settings\1170\{00000000-0000-0000-0000-000000000000}\PendingChanges' -Resolve)

$val = Get-ItemProperty -Path . -Name "Data" 
if($val."Data" -eq ([byte[]](0x02,0x00,0x00,0x00)))
{
    Write-Host "Microsoft Office Theme:" -NoNewline; Write-Host "....Dark Grey Theme already set..no changes needed " -ForegroundColor Green -BackgroundColor Black
    Write-Output "Office theme: Dark Grey already set..no changes needed" | Out-File -FilePath "$LogPath\$env:ComputerName.log" -Append -NoClobber
} else {
set-itemproperty -Path . -Name "Data" -Value ([byte[]](0x02,0x00,0x00,0x00)) -Force
    Write-Host "Microsoft Office Theme:" -NoNewline; Write-Host "....Dark Grey Theme has been set " -ForegroundColor Cyan -BackgroundColor Black
    Write-Output "Office theme: Dark Grey has been set" | Out-File -FilePath "$LogPath\$env:ComputerName.log" -Append -NoClobber
}
Pop-Location

当我改变普通的''UI主题'时,我可以使它工作,因为这是一个只有一个数字的双字值。该脚本工作正常,但由于outlook与服务器同步,因此必须更改漫游标识。当我运行这个脚本时,它总是会说“暗灰已经设置”,即使它没有。它会改变它但只是错误的消息。 我也使用-ne和-binary进行了相反的修改,但同样的问题。

if($val."Data" -ne 02,00,00,00)
{
 set-itemproperty -Path . -Name "Data" -Value 02,00,00,00 -Type Binary -Force

所以基本上,它部分工作,只是想显示正确的消息。我仍然是powershell的初学者(仅使用/学习一周),所以请保持温和。如果你能告诉我我错过了什么,或者为什么它不起作用,那就太好了。

1 个答案:

答案 0 :(得分:0)

使用Compare-Object比较2个数组:

if ((Compare-Object $val.'Data' 2,0,0,0) -ne $null) {
  Set-ItemProperty -Path . -Name 'Data' -Value 2,0,0,0 -Type Binary -Force
} else {
  'Dark great already set..no changes needed'
}