11

我正在学习 PowerShell 并试图在远程服务器上停止 IIS。

我正在使用以管理员模式启动的 PowerGUI 脚本编辑器。

我有这个代码

$service = Get-WmiObject Win32_Service -ComputerName 'myserver'  -Filter "Name='IISAdmin'"
$service
$service.StopService();
$service.State

状态总是以运行状态返回。我不知道为什么它没有停止。

编辑

我在运行时遇到的错误

Invoke-Command -ComputerName 'myserver' { Stop-Service IISAdmin }

连接到远程服务器失败并显示以下错误消息:客户端无法连接到请求中指定的目标。验证目标上的服务是否正在运行并且正在接受请求。请查阅在目标(最常见的是 IIS 或 WinRM)上运行的 WS-Management 服务的日志和文档。如果目标是 WinRM 服务,在目标上运行以下命令来分析和配置 WinRM 服务:“winrm quickconfig”。有关详细信息,请参阅 about_Remote_Troubleshooting 帮助主题。

编辑2

我发现了这个,它似乎有效。我不知道如何从 Stop-Service 取回信息,所以我不得不使用其他方式将其发送给我。如果你知道怎么做,请告诉我。

Stop-Service -Force -InputObject $(Get-Service -Computer myserver -Name IISAdmin)
$service = Get-WmiObject Win32_Service -ComputerName 'myserver '  -Filter "Name='IISAdmin'"
$service.State

这行得通。我不明白为什么。我唯一能想到的是我必须使用 -Force 因为它不会停止服务器,否则也许这是一个原因?

4

5 回答 5

9

停止 IIS(如 iis-Manager 中服务器上的“右键单击 > 停止”):

spsv iisadmin,was,w3svc -pa

方法:

stop-service -name iisadmin,was,w3svc -passThru # -passThru is optional but basically outputs the result

(替代方案:gsv iisadmin,was,w3svc |spsv -pa|sasv -pa重新启动服务并输出结果,但在本例中,第二个 -pa 是可选的!!!仅供参考:gsv=get-service,sasv=start-service,spsv=stop-service,pa=passThru)

于 2016-02-22T14:54:45.790 回答
8

您可以使用 iisreset 远程停止/重新启动 iis:

iisreset [computername]
于 2012-05-24T12:27:42.900 回答
7
Invoke-Command -ComputerName myserver { Stop-Service W3SVC}
于 2012-05-23T21:12:43.120 回答
2

尝试使用 PsExec \Server2 -u Administrator -p somePassword IISReset /STOP

或使用 PowerGUI 脚本编辑器

$service = Get-WmiObject -computer 'ServerA' Win32_Service -Filter "Name='IISAdmin'"
$service
$service.InvokeMethod('StopService',$Null)
$service.State

尝试使用

$server = "servername"
$siteName = "Default Web Site"
$iis = [ADSI]"IIS://$server/W3SVC"
$site = $iis.psbase.children | where { $_.keyType -eq "IIsWebServer" -AND
$_.ServerComment -eq $siteName }
$site.serverstate=3
$site.setinfo()
于 2012-05-23T21:09:31.877 回答
1

我不喜欢处理 WMI 对象。相反,我建议iisreset /stop与 PowerShell 远程处理结合使用。所以,本质上是这样的:

Invoke-Command -ComputerName 'myserver' -ScriptBlock { & iisreset /stop }

您也可以换出/stop/start在远程服务器上启动 IIS。

如果您不想利用iisreset.exePowerShell 而是使用纯 PowerShell,则可以W3SVC改为启动/停止服务:

Invoke-Command -ComputerName 'myserver' -ScriptBlock { Stop-Service W3SVC }

并替换Stop-ServiceStart-Service重新启动它。该W3SVC服务是 IIS。

于 2021-08-17T05:15:07.760 回答