如何使用 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 remoting运行远程命令

如何使用 PowerShell 远程检查 Web 应用程序池的状态?

如何使用 PowerShell 在 IIS 中停止和启动各个网站?

如何远程启动和停止服务