下面的脚本仅在作为函数运行时才起作用,因此我尝试更改它,因此当我在Power Shell中运行。\ SCript.ps1时,该脚本将检查reg键,如果找到一个值,则在不退出时重新启动,转换下面的脚本来执行此操作的最佳方法是什么?:
function Test-PendingReboot1{
function Test-PendingReboot
{
if (Get-ChildItem "HKLM:\Software\Microsoft\Windows\CurrentVersion\Component Based Servicing\RebootPending" -EA Ignore) { return $true }
if (Get-Item "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update\RebootRequired" -EA Ignore) { return $true }
if (Get-ItemProperty "HKLM:\SYSTEM\CurrentControlSet\Control\Session Manager" -Name PendingFileRenameOperations -EA Ignore) { return $true }
try {
$util = [wmiclass]"\\.\root\ccm\clientsdk:CCM_ClientUtilities"
$status = $util.DetermineIfRebootPending()
if(($status -ne $null) -and $status.RebootPending){
return $true
}
}catch{}
return $false
}
if (Test-PendingReboot -eq "false") {Restart-Computer -Force}
}
答案 0 :(得分:1)
要回答最简单的问题,要将代码示例转换为脚本,您可以执行以下操作:
[CmdletBinding()]
param()
function Test-PendingReboot() {
$local:ErrorActionPreference = 'SilentlyContinue'
$cv = 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion'
if (Get-ChildItem -Path "$cv\Component Based Servicing\RebootPending") {
return $true
}
if (Get-Item -Path "$cv\WindowsUpdate\Auto Update\RebootRequired") {
return $true
}
if (Get-ItemProperty -Path 'HKLM:\SYSTEM\CurrentControlSet\Control\Session Manager' -Name PendingFileRenameOperations) {
return $true
}
$util = [wmiclass]'\\localhost\root\ccm\clientsdk:CCM_ClientUtilities'
$status = $util.DetermineIfRebootPending()
if ($null -ne $status -and $status.RebootPending) {
return $true
}
$false
}
if (Test-PendingReboot) {
Restart-Computer -Force
}
作为脚注,您不应将布尔值视为字符串(您的-eq "false"
比较)。
答案 1 :(得分:0)
函数似乎没有任何参数,因此您只需添加
就可以使其成为自调用脚本Test-PendingReboot1
在函数底部,那么当您调用脚本时它将自动调用