更改功能以在运行Power Shell脚本时运行

时间:2019-03-21 14:56:29

标签: powershell

下面的脚本仅在作为函数运行时才起作用,因此我尝试更改它,因此当我在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}
    }

2 个答案:

答案 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

在函数底部,那么当您调用脚本时它将自动调用