157

ドメインに属するリモート コンピューターを再起動したいと考えています。管理者アカウントを持っていますが、powershell からそれを使用する方法がわかりません。

コマンドレットがあり、資格情報を渡すことができることは知っていRestart-Computerますが、たとえばドメインがmydomain、ユーザー名がmyuser、パスワードがmypasswordそれを使用する正しい構文である場合はどうすればよいですか?

パスワードを入力する必要がないように、再起動をスケジュールする必要があります。

4

12 に答える 12

210

問題Get-Credentialは、常にパスワードを求めるプロンプトが表示されることです。ただし、これを回避する方法はありますが、パスワードを安全な文字列としてファイルシステムに保存する必要があります。

次の記事では、これがどのように機能するかについて説明します。

プロンプトなしで PSCredentials を使用する

要約すると、パスワードを (暗号化された文字列として) 保存するファイルを作成します。c:\mysecurestring.txt次の行はパスワードの入力を求め、それを暗号化された文字列として保存します。これを行う必要があるのは 1 回だけです。

read-host -assecurestring | convertfrom-securestring | out-file C:\mysecurestring.txt

-CredentialPowerShell コマンドで引数が表示される場所はどこでも、 PSCredential. だからあなたの場合:

$username = "domain01\admin01"
$password = Get-Content 'C:\mysecurestring.txt' | ConvertTo-SecureString
$cred = new-object -typename System.Management.Automation.PSCredential `
         -argumentlist $username, $password

$serverNameOrIp = "192.168.1.1"
Restart-Computer -ComputerName $serverNameOrIp `
                 -Authentication default `
                 -Credential $cred
                 <any other parameters relevant to you>

-Authenticationあなたの環境がわからないので、別のスイッチ値が必要になるかもしれません。

于 2011-06-05T00:51:20.863 に答える
72

別の方法もありますが...

パスワードをスクリプトファイル に保存したくない場合は、これを行わないでください (パスワードをスクリプトに保存するのは良い考えではありませんが、その方法を知りたい人もいます)。

OK、それは警告でした。コードは次のとおりです。

$username = "John Doe"
$password = "ABCDEF"
$secstr = New-Object -TypeName System.Security.SecureString
$password.ToCharArray() | ForEach-Object {$secstr.AppendChar($_)}
$cred = new-object -typename System.Management.Automation.PSCredential -argumentlist $username, $secstr

$credJohn Doe からのクレデンシャルがパスワード「ABCDEF」で取得されます。

パスワードを使用できるようにする代替手段:

$password = convertto-securestring -String "notverysecretpassword" -AsPlainText -Force
于 2012-02-07T18:54:51.823 に答える
30

資格情報の保存に関して、私は 2 つの関数を使用します (通常、プロファイルから読み込まれるモジュールにあります)。

#=====================================================================
# Get-MyCredential
#=====================================================================
function Get-MyCredential
{
param(
$CredPath,
[switch]$Help
)
$HelpText = @"

    Get-MyCredential
    Usage:
    Get-MyCredential -CredPath `$CredPath

    If a credential is stored in $CredPath, it will be used.
    If no credential is found, Export-Credential will start and offer to
    Store a credential at the location specified.

"@
    if($Help -or (!($CredPath))){write-host $Helptext; Break}
    if (!(Test-Path -Path $CredPath -PathType Leaf)) {
        Export-Credential (Get-Credential) $CredPath
    }
    $cred = Import-Clixml $CredPath
    $cred.Password = $cred.Password | ConvertTo-SecureString
    $Credential = New-Object System.Management.Automation.PsCredential($cred.UserName, $cred.Password)
    Return $Credential
}

そしてこれ:

#=====================================================================
# Export-Credential
# Usage: Export-Credential $CredentialObject $FileToSaveTo
#=====================================================================
function Export-Credential($cred, $path) {
      $cred = $cred | Select-Object *
      $cred.password = $cred.Password | ConvertFrom-SecureString
      $cred | Export-Clixml $path
}

次のように使用します。

$Credentials = Get-MyCredential (join-path ($PsScriptRoot) Syncred.xml)

資格情報ファイルが存在しない場合は、最初にプロンプ​​トが表示されます。その時点で、XML ファイル内の暗号化された文字列に資格情報が保存されます。その行を 2 回目に実行すると、xmlfile がそこにあり、自動的に開かれます。

于 2011-06-05T04:47:41.963 に答える
4

再起動をスケジュールしている場合は、次の 2 つの方法でこれを行うことができます。

まず、別のマシンに接続して再起動するために必要な権限を持つ資格情報を使用して、あるマシンでタスクを作成できます。これにより、スケジューラは資格情報を安全に保存する責任を負います。再起動コマンド (私は Powershell 派ですが、これはよりクリーンです) は次のとおりです。

SHUTDOWN /r /f /m \\ComputerName

ローカル マシンでスケジュールされたタスクを作成し、別のタスクをリモートで再起動するコマンド ラインは次のようになります。

SCHTASKS /Create /TN "Reboot Server" /TR "shutdown.exe /r /f /m \\ComputerName" /SC ONCE /ST 00:00 /SD "12/24/2012" /RU "domain\username" /RP "password"

私は 2 番目の方法を好みます。現在の資格情報を使用して、リモート マシンのシステム アカウントで実行されるスケジュールされたタスクを作成します。

SCHTASKS /Create /TN "Reboot Server" /TR "shutdown.exe /r /f" /SC ONCE /ST 00:00 /SD "12/24/2012" /RU SYSTEM /S ComputerName

これは GUI でも機能します。ユーザー名として SYSTEM を入力し、パスワード フィールドは空白のままにします。

于 2012-07-09T17:27:57.427 に答える