1

私は、会社が使用している外部ソフトウェア プログラムとやり取りするための powershell スクリプトを作成しています。

スクリプトは、入力パラメーターの値を取得して何かを行う必要があります。

しかし問題は、この外部ソフトウェアが多くの入力パラメーターを名前付きでプッシュすることです。

  • 送信者メール
  • 送信者 IP
  • 送信者ポート
  • エンドポイント ユーザー名
  • エンドポイント マシン名

sender-ipの値だけが必要です。しかし、私の問題は

  1. 外部プログラムがスクリプトにパラメーターを入力する順序がわかりません
  2. Powershell の命名規則ではハイフンを使用できないため、sender-ipを使い始めてもエラーが発生するわけではありません 「sender-ip」という用語は、コマンドレット、関数、スクリプト ファイル、または操作可能ファイルの名前として認識されませんプログラム。

これまでの私のスクリプトは次のとおりです

param([string]$Sender_IP=$(**sender-ip**))
$eventList = @()
Get-EventLog "Security" -computername $Sender_IP `
        | Where -FilterScript {$_.EventID -eq 4624 -and $_.ReplacementStrings[4].Length -gt 10 -and $_.ReplacementStrings[5] -notlike "*$"} `
        | Select-Object -First 2 `
        | foreach-Object {
            $row = "" | Select UserName, LoginTime
            $row.UserName = $_.ReplacementStrings[5]
            $row.LoginTime = $_.TimeGenerated
            $eventList += $row
            }
$UserId = $eventList[0].UserName

$UserID

手動で呼び出すと、foo.psl *ip_address*,すべてがうまく機能します。しかし、パラメータなしでプログラムを呼び出すと、エラーが発生します。

などのコードの書き方

if name of input variable is **sender-ip** 
   do something
else if name of input variable is something different 
   ignore

入力パラメーターの値を評価していません。sender-ip という名前の入力パラメーターを取得したいので、そこからスクリプトを実行して評価します。

私の質問をうまく説明できたと思います。

以前は、Python スクリプトを使用してこのサードパーティ プログラムとやり取りしていました。このスクリプトでは、次のように簡単に記述できます。

attributeMap = parseInput(args) 
dateSent = attributeMap["sender-ip"]

私はpowershellを使用することを強く好みます。

ありがとうございました!

4

1 に答える 1

2

私があなただったら、プログラムの実行時にスクリプトへの実際の入力を確認することから始めるでしょう...

ただし、それがうまくいく場合:

.\yourscript.ps1 -foo-bar something -something-else value -sender-ip yourdata

非常に簡単に send-ip の値を取得できます。

param (
    ${sender-ip}
)
"Sender IP = ${sender-ip}"

そうでない場合は$args、スクリプトで simple を実行したときに得られるものをここに貼り付ける必要があります。そこにあるものを見ないと、Pythonが行うことに似た何かを提案するのは難しいかもしれません...

編集

データを名前=値のペアとして受け取る場合は、これを試してください:

function foo {
    $hash = ConvertFrom-StringData -StringData ($Args -Join "`n")
    $hash.'sender-ip'
}
foo test-first=alfa sender-ip=beta

私のテストでは、期待される(ベータ版)結果が得られました...

于 2013-08-08T07:52:25.290 に答える