如何使用 PowerShell 启动/停止远程服务器上的服务 - Windows 2008 并提示输入凭据?
Posted
技术标签:
【中文标题】如何使用 PowerShell 启动/停止远程服务器上的服务 - Windows 2008 并提示输入凭据?【英文标题】:How to start/stop a service on a remote server using PowerShell - Windows 2008 & prompt for credentials? 【发布时间】:2013-05-06 22:39:15 【问题描述】:我正在尝试创建一个 PowerShell 脚本,该脚本将在远程计算机上启动/停止服务,但会提示用户输入所有值。我知道将要使用的帐户;我只需要提示用户输入密码。
这适用于Tomcat 实例。问题是 Tomcat 服务在不同服务器(tomcat6、tomcat7)上的名称并不总是相同。我需要能够存储加密的密码并提示停止或启动。这是我到目前为止所拥有的。有什么想法吗?
我不确定-AsSecureString
是否在正确的位置。
# Prompt for user credentials
$credential=get-credential -AsSecureString -credential Domain\username
# Prompt for server name
$server = READ-HOST "Enter Server Name"
# Prompt for service name
$Service = READ-HOST "Enter Service Name"
gwmi win32_service -computername $server -filter "name='$service'" -Credential'
$cred.stop-service
【问题讨论】:
【参考方案1】:这应该可以帮助您入门,它使用可选参数作为凭据和服务名称,如果您省略凭据,它将提示输入它们。如果您省略服务名称,它将默认为 tomcat*,它应该返回与该过滤器匹配的所有服务。然后根据需要将搜索结果通过管道传输到 stop 或 start。
由于计算机名接受管道输入,您可以传入一组计算机,或者如果它们存在于文件管道中,则将该文件的内容传递到脚本中。
例如
Get-Content computers.txt | <scriptname.ps1> -Control Stop
希望对您有所帮助...
[cmdletBinding(SupportsShouldProcess=$true,ConfirmImpact="High")]
param
(
[parameter(Mandatory=$true,ValueFromPipeline=$true,ValueFromPipelineByPropertyName=$true)]
[string]$ComputerName,
[parameter(Mandatory=$false)]
[string]$ServiceName = "tomcat*",
[parameter(Mandatory=$false)]
[System.Management.Automation.PSCredential]$Credential,
[parameter(Mandatory=$false)]
[ValidateSet("Start", "Stop")]
[string]$Control = "Start"
)
begin
if (!($Credential))
#prompt for user credential
$Credential = get-credential -credential Domain\username
process
$scriptblock =
param ( $ServiceName, $Control )
$Services = Get-Service -Name $ServiceName
if ($Services)
switch ($Control)
"Start" $Services | Start-Service
"Stop" $Services | Stop-Service
else
write-error "No service found!"
Invoke-Command -ComputerName $computerName -Credential $credential -ScriptBlock $scriptBlock -ArgumentList $ServiceName, $Control
【讨论】:
这很有趣。我以前没有使用过 cmdletbinding。这绝对让我走上正轨。我想过尝试使用 switch 语句来停止或启动服务,但不知道如何实现它。再次感谢,这很有帮助。 我遇到了这个谈论使用机器密钥加密的网站。关于如何在这个脚本上暗示它的任何想法? powertoe.wordpress.com/2011/06/05/… 非常接近于让它工作,如果使用加密凭据,只需要能够被多个用户使用。以上是关于如何使用 PowerShell 启动/停止远程服务器上的服务 - Windows 2008 并提示输入凭据?的主要内容,如果未能解决你的问题,请参考以下文章
powershell SDL Quatron服务使用PowerShell重新启动,启动和停止
powershell SDL Quatron服务使用PowerShell重新启动,启动和停止
如何使用 PowerShell 远程检查 Web 应用程序池的状态?