我有一个可以在PowerShell中使用的衬垫。
If (Get-ItemProperty -Path 'HKLM:\SOFTWARE\SCCM' -ErrorAction SilentlyContinue) {} Else {$RegistryPath = "HKLM:\SOFTWARE\"; $NewRegKey = "SCCM"; New-Item -Path $RegistryPath -Name $NewRegKey -Force; $NewRegKeyPath = "HKLM:\SOFTWARE\SCCM"; $KeyName = "W10_IPU_Attempts"; $Value = "0"; New-ItemProperty -Path $NewRegKeyPath -Name $KeyName -Value $Value -PropertyType DWORD -Force | Out-Null}; $i= $Value =(Get-Itemproperty 'HKLM:\SOFTWARE\SCCM').W10_IPU_Attempts; If ($i -eq $value){ $i++; Set-ItemProperty -Path 'HKLM:\SOFTWARE\SCCM' -Name W10_IPU_Attempts -Value $i } else { $i++; Set-ItemProperty -Path 'HKLM:\SOFTWARE\SCCM' -Name W10_IPU_Attempts -Value $i }
现在,当我添加以下内容并对其进行测试时,我在smsts.log中收到错误消息,称其功能不正确。通过CMD运行时,出现“字符串缺少终止符” C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -NoProfile -ExecutionPolicy ByPass -Command " & If (Get-ItemProperty -Path 'HKLM:\SOFTWARE\SCCM' -ErrorAction SilentlyContinue) {} Else {$RegistryPath = "HKLM:\SOFTWARE\"; $NewRegKey = "SCCM"; New-Item -Path $RegistryPath -Name $NewRegKey -Force; $NewRegKeyPath = "HKLM:\SOFTWARE\SCCM"; $KeyName = "W10_IPU_Attempts"; $Value = "0"; New-ItemProperty -Path $NewRegKeyPath -Name $KeyName -Value $Value -PropertyType DWORD -Force | Out-Null}; $i= $Value =(Get-Itemproperty 'HKLM:\SOFTWARE\SCCM').W10_IPU_Attempts; If ($i -eq $value){ $i++; Set-ItemProperty -Path 'HKLM:\SOFTWARE\SCCM' -Name W10_IPU_Attempts -Value $i } else { $i++; Set-ItemProperty -Path 'HKLM:\SOFTWARE\SCCM' -Name W10_IPU_Attempts -Value $i }"
我找不到我想完成的地方。预先谢谢你。
答案 0 :(得分:0)
知道实现一致的重要性。我能够解决问题,因为我解决了所有报价。对于任何有兴趣的人,这是最终的脚本。
C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -NoProfile -ExecutionPolicy ByPass -Command "If (Get-ItemProperty -Path 'HKLM:\SOFTWARE\SCCM' -ErrorAction SilentlyContinue) {} Else {$RegistryPath = 'HKLM:\SOFTWARE\'; $NewRegKey = 'SCCM'; New-Item -Path $RegistryPath -Name $NewRegKey -Force; $NewRegKeyPath = 'HKLM:\SOFTWARE\SCCM'; $KeyName = 'W10_IPU_Attempts'; $Value = '0'; New-ItemProperty -Path $NewRegKeyPath -Name $KeyName -Value $Value -PropertyType DWORD -Force | Out-Null}; $i= $Value =(Get-Itemproperty 'HKLM:\SOFTWARE\SCCM').W10_IPU_Attempts; If ($i -eq $value){ $i++; Set-ItemProperty -Path 'HKLM:\SOFTWARE\SCCM' -Name W10_IPU_Attempts -Value $i } else { $i++; Set-ItemProperty -Path 'HKLM:\SOFTWARE\SCCM' -Name W10_IPU_Attempts -Value $i }"
答案 1 :(得分:0)
您所拥有的是完整的脚本,而不是一线书。为什么不以格式正确的脚本形式提供它,以便可以轻松/直观地捕获这些东西。当我将您发布到编辑器中时,所有错误都是显而易见的。
重构示例:
If (Get-ItemProperty -Path 'HKLM:\SOFTWARE\SCCM' -ErrorAction SilentlyContinue)
{
# Do nothing
}
Else
{
$RegistryPath = 'HKLM:\SOFTWARE\'
$NewRegKey = 'SCCM'
New-Item -Path $RegistryPath -Name $NewRegKey -Force
$NewRegKeyPath = 'HKLM:\SOFTWARE\SCCM'
$KeyName = 'W10_IPU_Attempts'
$Value = '0'
$newItemPropertySplat = @{
Path = $NewRegKeyPath
PropertyType = 'DWORD'
Name = $KeyName
Force = $true
Value = $Value
}
New-ItemProperty @newItemPropertySplat |
Out-Null
}
$i = $Value = (Get-Itemproperty 'HKLM:\SOFTWARE\SCCM').W10_IPU_Attempts
If ($i -eq $value)
{
$i++
Set-ItemProperty -Path 'HKLM:\SOFTWARE\SCCM' -Name W10_IPU_Attempts -Value $i
}
else
{
$i++
Set-ItemProperty -Path 'HKLM:\SOFTWARE\SCCM' -Name W10_IPU_Attempts -Value $i
}