gpt4 book ai didi

windows - 未登录服务器时,脚本中的 Get-Service 不起作用

转载 作者:可可西里 更新时间:2023-11-01 10:48:58 30 4
gpt4 key购买 nike

我编写了一个脚本,每 15 分钟检查一次 Web 服务器上的 IIS 服务状态。我通过 Windows 任务计划程序安排了这个脚本。

当我登录到服务器并在正常运行时手动运行脚本。当我没有登录到服务器并通过批处理脚本执行此操作时,Get-Service 查询不会为 IIS 返回 Running,即使它确实已启动并重新启动服务。

为什么当我以物理方式登录到服务器时与作为幕后计划任务运行时此脚本的运行方式不同?

脚本是这样调用的:C:\Scripts\powershell.exe -File verify_status.ps1 [Service param]

##############################
# Get service status
##############################
if($args[0] -ne $NULL){

$serviceName = $args[0]
$serverName = hostname

$status = (Get-Service $serviceName).Status

if ($status -ne "Running"){
sendMail "$serviceName" "$serverName"
Restart-Service $ServiceName
}else{
# Service is running, do nothing;
}
}

=====================================

编辑 - 当脚本在没有人登录的情况下运行时,Get-Service 返回一个NULL。如果这有帮助的话。

最佳答案

有两件事解决了这个问题。我认为最主要的是更改调用 powershell 脚本的 .bat 脚本。

我从:

C:\Scripts\powershell.exe -File verify_status.ps1 [Service param]

C:\Scripts\powershell.exe -File verify_status.ps1 "[Service param]"

双引号是将参数正确传递给 powershell 脚本所必需的。

我还在 powershell 脚本本身中更改了以下内容。我不确定这是否有必要,但两者的结合使这项工作有效:

$status = (Get-Service $serviceName).Status

$status = (Get-WmiObject -ComputerName SERVERNAME -Class Win32_Service -Filter "Name='$serviceName'").State

Windows 任务计划程序 现在可以正确无误地执行此脚本。

关于windows - 未登录服务器时,脚本中的 Get-Service 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12606120/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com