我在几年前发过一个问题,我需要一个powershell脚本,如果它停止了就会启动一个服务,如果运行时间超过一个小时就停止进程然后重新启动它,如果运行不到一个小时就什么都不做。我得到了一个非常有用的剧本,但是我试图将它转换成一个"过程"。我有以下代码(如下)但我收到以下错误
错误 " cmdlet命令管道位置3处的Start-Process 提供以下参数的值: FilePath:"
Powershell的
# for debugging
$PSDefaultParameterValues['*Process:Verbose'] = $true
$str = Get-Process -Name "Chrome"
if ($str.Status -eq 'stopped') {
$str | Start-Process
} elseif ($str.StartTime -lt (Get-Date).AddHours(-1)) {
$str | Stop-Process -PassThru | Start-Process
} else {
'Chrome is running and StartTime is within the past hour!'
}
# other logic goes here
答案 0 :(得分:0)
您的$str
正在存储名称为" Chrome"的所有流程列表,因此我想您需要一个流程。您需要在Get-Process
中指定ID,或使用$str[0]
来挑选列表中的特定流程。
当您在$str
中存储单个流程时,如果您尝试打印$str.Status
,则会发现它不会输出任何内容,因为状态不属于处理。流程要么正在运行,要么不存在。也就是说,您可能希望让您的逻辑检查它是否可以找到该进程,然后如果它不能启动该进程,则在这种情况下它需要可执行文件的路径来启动该进程。有关示例的更多信息,请访问:https://technet.microsoft.com/en-us/library/41a7e43c-9bb3-4dc2-8b0c-f6c32962e72c?f=255&MSPPError=-2147217396
如果您正在使用Powershell ISE,请尝试将流程存储在终端中的变量中,然后使用点键入变量,Intellisense(如果它已启用)应该列出其所有的可用的属性。