1

リモート コンピューターでサービスを開始/停止する 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
4

1 に答える 1

2

これで開始できます。資格情報とサービス名にオプションのパラメーターを使用します。資格情報を省略すると、それらの入力を求めるプロンプトが表示されます。サービス名を省略すると、デフォルトで tomcat* になり、そのフィルターに一致するすべてのサービスが返されます。検索の結果は、必要に応じて stop または start にパイプされます。

computername はパイプライン入力を受け入れるため、コンピューターの配列を渡すことができます。または、それらがファイル パイプに存在する場合は、そのファイルの内容をスクリプトに渡します。

例えば

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
}
于 2013-05-07T09:24:55.340 に答える