2017-03-28 8 views
0

何かにログインするには、page1にユーザー名を、page2にパスワードを入力してからpage3にsubmitをクリックする必要があります。それを簡単にするために私はPSスクリプトを書いた。私はパスワードをハードコーディングしてダブルチェックし、成功しました。Powershell - 安全な文字列で行をマスクする

パスワードをハードコードしたくないのですが、私は追加した$passとそれを読む方法を使用しました。しかし、今私はスクリプトを実行すると、無効なパスワードを取得します。

私はGet-Credentialsを使いたかったのですが、特定のページでユーザー名またはパスワードを渡すだけではわかりませんでした。

私は目標に向かって正しい方向に私を助けるために助言をいただきたいと思います。

$pass = Read-Host 'd\P What is your password?' -AsSecureString 
[Runtime.InteropServices.Marshal]::PtrToStringAuto(
[Runtime.InteropServices.Marshal]::SecureStringToBSTR($pass)) 
$IE = New-Object -ComObject InternetExplorer.Application 
$URL = 'https://website/' 
$IE.Visible = $true 
$IE.Navigate($URL) 
While ($IE.Busy -eq $true) {Start-Sleep -Milliseconds 1000} 
$ie.Document.getElementById('DATA').value = "P0523586" 
$Submit = $ie.Document.getElementsByTagName('Input') | ? {$_.Type -eq "Submit"} 
$Submit.click() 
While ($IE.Busy -eq $true) {Start-Sleep -Milliseconds 1000} 
$ie.Document.getElementById('DATA').value = "$pass" 
$Submit = $ie.Document.getElementsByTagName('Input') | ? {$_.Type -eq "Submit"} 
$Submit.click() 
While ($IE.Busy -eq $true) {Start-Sleep -Milliseconds 1000} 
$Submit = $ie.Document.getElementsByTagName('Input') | ? {$_.Type -eq "Submit"} 
$Submit.click() 
+0

デコードされた '$ pass'をエコーし​​て正しいことを確認しましたか? – arco444

答えて

1

Get-Credentialは、スクリプトに安全に保管しなければならない何かを格納していません。このようについて行くには良い方法です。

それは、オブジェクト変数にGet-Credentialsから返さ割り当てることが最も簡単です:

$credentials = Get-Credential 

あなたはその後、ユーザー名を取得するために$credentials.UserNameを使用することができます。

PS> $credentials.UserName 
myusername 

そして$credentials.Passwordをセキュリティで保護されたパスワードオブジェクト

を取得するために、
PS> $credentials.Password 
System.Security.SecureString 

他のPowerShellコマンドで実行されますが、安全なパスワードオブジェクトを受け入れることができないプロセスにデコードする前に、デコードする必要があります(アンセキュアにする必要があります)。スクリプトで

PS> $credentials.GetNetworkCredential().Password 
mypassword 

あなたのスクリプトの先頭で$credentials = Get-Credentialを追加し、ユーザー名を提出する:

プレーンテキストでパスワードを取得するには、このようなGetNetworkCredentialメソッドを使用することができます/パスワードを次のような形式に変更します。

$ie.Document.getElementById('DATA').value = $credentials.UserName 

$ie.Document.getElementById('DATA').value = $credentials.GetNetworkCredential().Password 
+0

ありがとう、これは多くの意味があります。これを実行すると、データを入力するための資格情報ボックスが表示されます。フィールドに自分のユーザー名を入力すると、自動的にユーザー名の前に '\'が入力され、アクセス拒否メッセージが表示されます。どのようにそれを取り除くための任意の考え? – freakostudent

+0

PowerShell v3では、ドメインを指定しないと、 'Get-Credential'はユーザー名の前にバックスラッシュを挿入しなくなりました。 2番目の文字(インデックス1)で始まる部分文字列を取得するには、($ credentials.UserName).Substring(1) 'を使用して、PowerShellを更新する必要がありますあなたが新しいバージョンのpowershellで動くかのように、あなたのユーザ名は最初の手紙ではなくなるでしょう。 –

関連する問題