1

PowerShell を使用してリモート サーバーの管理者パスワードを変更するスクリプトを作成しようとしています。次のコマンドはこれを行います

$Admin=[adsi]("WinNT://" + MyServer + "/Administrator, user")
$Admin.SetPassword("NewPassword")

しかし、"NewPassword"より安全にするために、スクリプト内で を非表示にしたいと考えています。

安全な .txt ファイルに保存し"NewPassword"て、このように使用できる方法はありますか?

$Admin.SetPassword("$secureFile")

スクリプトは、スケジュールされたタスクとして実行されます。

4

1 に答える 1

1

はいConvertTo-SecureStringおよびConvertFrom-SecureStringコマンドレットを使用して、パスワードをディスク上のファイルに保存する前に暗号化できます。

ただし、コマンドレットを使用してパスワードを暗号化/復号化するには、暗号化キーが必要になることに注意してください。ドキュメントから:

Keyまたはパラメータを使用して暗号化キーを指定する場合はSecureKey 、Advanced Encryption Standard(AES)暗号化アルゴリズムが使用されます。指定されたキーの長さは128、192、または256ビットである必要があります。これらはAES暗号化アルゴリズムでサポートされているキーの長さだからです。

キーを指定しない場合、暗号化にはWindowsデータ保護API(DPAPI)が使用されます。これは、キーがコマンドレットを呼び出したユーザーアカウントに関連付けられることを意味します。これで、スクリプトをスケジュールされたジョブとして実行している場合、このソリューションは問題なく機能します。

生成されたキーを使用して、暗号化されたパスワードをディスク上のXMLファイルに保存して読み取るスクリプトを次に示します。

function Get-SecurePassword {
<#
.Synopsis
    Gets a password stored securely in an XML file.
.Parameter Path
    The path to the XML file to import the password from.
#>
[CmdletBinding()]
param(
    [Parameter(Position=1)]
    [string]$Path = "Password.xml"
)
    if (Test-Path $Path) {
        $cache = Import-Clixml $Path
        $key = [System.Convert]::FromBase64String($cache.Secret)
        $password = $cache.EncryptedPassword | ConvertTo-SecureString -Key $key
        $password
    }
}

function Set-SecurePassword {
<#
.Synopsis
    Stores a password securely in an XML file.
.Parameter Path
    The path to the XML file to export the password to.
#>
[CmdletBinding()]
param(
    [Parameter(Position=1)]
    [string]$Password,
    [Parameter(Position=2)]
    [string]$Path = "Password.xml"
)
    $key = New-StrongPasswordBytes -Length 32
    $textualKey = [System.Convert]::ToBase64String($key)
    $securePassword = $Password | ConvertFrom-SecureString -Key $key
    $cache = New-Object PSObject -Property @{ "EncryptedPassword" = $securePassword; "Secret" = $textualKey }
    $cache.PSObject.TypeNames.Insert(0, "SecurePassword")
    $cache | Export-Clixml $Path
}

function New-StrongPasswordBytes ($length) {
    Add-Type -Assembly System.Web
    $password = [System.Web.Security.Membership]::GeneratePassword($length, $length / 2)
    [System.Text.Encoding]::UTF8.GetBytes($password)
}
于 2013-01-22T09:48:06.207 に答える