質問者
リモートのPCへのイベントログ通知方法

質問
-
ホストのイベントログをリモートのPCでイベントログを監視するために通知させたいのですが権限がないとエラーが出ます。
権限を取得する方法やいい解決方法がございましたら解決方法をご教授願います。
実行コマンド
Write-EventLog -ComputerName XXX.XXX.XXX.XXX -LogName Application -EntryType Error -Source TEST -EventId 1000 -Message "test"
エラー内容
Write-EventLog : 許可されていない操作を実行しようとしました。
発生場所 行:1 文字:1
+ Write-EventLog -ComputerName XXX.XXX.XXX.XXX -LogName Application -EntryType Error ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [Write-EventLog], UnauthorizedAccessException
+ FullyQualifiedErrorId : System.UnauthorizedAccessException,Microsoft.PowerShell.Commands.WriteEventLogCommand
すべての返信
-
Write-EventLogコマンドレットには-Credentialパラメータの定義がないため、接続先コンピュータにアクセス権がないアカウントで実行することはできないと思われます。
代替案として、Invoke-Commandコマンドレットを使い、PowerShellリモートの機能によりWrite-EventLogコマンドレットをリモート実行する方法が考えられます。
Invoke-Commandには-Credentialパラメータのサポートがありますので、接続先コンピュータにアクセス権のあるユーザーを指定すれば実行可能となります。ただし、あらかじめリモートコンピュータがPowerShellリモートによる操作を受け付ける状態にしておく必要があります。
-
方法はいくつかありますがお勧めの方法は、パスワードを事前に入力し、暗号化してテキストファイルに保存しておく方法です。
ConvertFrom-SecureString (Read-Host -AsSecureString) | Set-Content -Path encrypted_password.txt
このようなコマンドを実行すると、パスワードを入力するプロンプトが出ますので、入力すると、暗号化されたパスワードがテキストファイルに保存されます。
事前に入力した暗号化したパスワードを読み込み、復号し、資格情報を生成しリモート実行するスクリプトは以下のようになります。
$encrypted = Get-Content encrypted_password.txt $secureString = ConvertTo-SecureString -String $encrypted $credential = New-Object ` -TypeName System.Management.Automation.PSCredential ` -ArgumentList "ユーザー名", $secureString Invoke-Command ` -ComputerName "コンピュータ名" ` -ScriptBlock {コマンド} ` -Credential $credential
なおこの手法で暗号化したパスワード文字列は、ログオン中のユーザーの資格情報を元に行われるため、他ユーザーが使用することはできません。よって、パスワードを暗号化するユーザーと、スクリプトを動作させるユーザーは同一である必要があります。
どうしてもこの方法が使えない状況であるなら、セキュリティリスクを認識した上で、以下のように生パスワードを埋め込む方法もあるにはあります。
$secureString = ConvertTo-SecureString -String "パスワード" -AsPlainText -Force $credential = New-Object ` -TypeName System.Management.Automation.PSCredential ` -ArgumentList "ユーザー名", $secureString Invoke-Command ` -ComputerName "コンピュータ名" ` -ScriptBlock {コマンド} ` -Credential $credential
- 編集済み 牟田口大介Moderator 2018年7月24日 18:50