Изменить функцию для запуска при запуске скрипта Power Shell - PullRequest
0 голосов
/ 21 марта 2019

Сценарий, приведенный ниже, работает только при запуске как функция, которую я пытаюсь изменить, поэтому, когда я запускаю. \ SCript.ps1 в power shell, скрипт проверяет ключи 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 ]

1 голос
/ 21 марта 2019

Чтобы ответить на ваш самый простой запрос, чтобы превратить ваш пример кода в скрипт, вы можете сделать следующее:

[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")).

0 голосов
/ 21 марта 2019

Не похоже, что ваша функция принимает какие-либо аргументы, так что вы можете сделать ее самопризывающим скриптом, просто добавив

Test-PendingReboot1

в конец вашей функции, тогда она сама вызовет себя, когда выназови свой сценарий

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...