1

我正在编写 powershell 脚本来与我们公司正在使用的外部软件程序进行交互

脚本需要获取输入参数的值并执行某些操作。

但问题是,这个外部软件用名字推送了很多输入参数

  • 发件人电子邮件
  • 发件人IP
  • 发件人端口
  • 端点用户名
  • 端点机器名称

我只需要sender-ip的值。但我的问题是

  1. 我不知道外部程序将参数输入到脚本中的顺序
  2. Powershell 命名约定不允许使用连字符,因此我无法直接开始使用sender-ip而不会出现错误术语“sender-ip”未被识别为 cmdlet、函数、脚本文件或可操作文件的名称程序。

到目前为止,这是我的脚本

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

你可以很容易地得到 sender-ip 的值:

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

如果不是这种情况,您可能必须在此处粘贴您$args在脚本中执行简单操作时获得的内容。如果没有看到那里有什么,可能很难提出类似于 python 所做的事情......

编辑

如果您以 name=value 对的形式接收数据,请尝试以下操作:

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 回答