gpt4 book ai didi

powershell - 通过 power-shell 检查 AppPool 状态并在远程计算机上启动它

转载 作者:行者123 更新时间:2023-12-04 01:23:56 27 4
gpt4 key购买 nike

要求是一一提取服务器名称并检查AppPool状态,如果发现已停止,则使其运行。下面的代码没有帮助。

$ErrorActionPreference = "Continue"
$status = gc -path "D:\Servers\server.txt"|ForEach-Object (invoke-command -ComputerName $_ -ScriptBlock {Import-Module Webadministration Get-WebAppPoolState -name (gc "D:\AppPool.txt")})

if ($status.value -eq "Started")
{
Write-Host ("ApppPool already running")
}
else
{
Invoke-Command -ScriptBlock {Start-WebAppPool}
Write-host ("AppPool has started successfully")
}

最佳答案

您的代码存在多个问题,我已逐一检查了这些问题,以便您可以了解是什么阻止了它正常工作。

foreach 的语法错误,在这种情况下您需要使用 {} 而不是 ()。普通括号仅像 ForEach ($number in $numArray ) {CODE} 这样使用,但您不是这样使用的。

您在 foreach 循环之外检查 $status - 因此仅评估 $status 一次(使用最终计算机 AppPool 状态) )而不是针对每台计算机。

您的第二个 Invoke-Command 没有指定 ComputerName 参数,因此仅在本地运行该命令,而不是针对远程计算机,这意味着 AppPool 永远不会启动.

当您使用 gc "D:\AppPool.txt" 指定 AppPool 名称时,此文件必须存在于每台远程计算机上才能正常工作。我已将其更改为作为参数传递到命令中,因此文件只需位于运行脚本的计算机上。

$Credentials = Get-Credential
$AppPools = Get-Content "D:\AppPool.txt"
$Servers = Get-Content -Path "D:\Servers\server.txt"

ForEach ($Server in $Servers) {
ForEach ($AppPool in $AppPools) {
$AppPoolState = Invoke-Command -ComputerName $Server -ScriptBlock {Import-Module WebAdministration; Get-WebAppPoolState -Name $args[0] } -ArgumentList $AppPool -Credential $Credentials

if ($AppPoolState.Value -eq "Started")
{
Write-Host "$AppPool AppPool already running on $Server"
}
else
{
Invoke-Command -ComputerName $Server -ScriptBlock {Start-WebAppPool -Name $args[0] } -ArgumentList $AppPool -Credential $Credentials
Write-Host "$AppPool AppPool started on $Server"
}
}
}

注意:我运行一个非特权帐户,因此必须提供凭据。如果您运行脚本的帐户对所有远程计算机具有适当的权限,您可以删除三个凭据引用。

关于powershell - 通过 power-shell 检查 AppPool 状态并在远程计算机上启动它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42980865/

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