在PowerShell中传递PortQry参数

在PowerShell中传递PortQry参数,powershell,port,portqry,Powershell,Port,Portqry,我正在尝试验证是否已实施了正确的防火墙规则,并且流是否正常工作。我已经找过了,似乎找不到解决办法。我正在使用PowerShell自动化服务器列表的PortQry请求(基于它的角色),这看起来很简单。但我似乎无法将参数正确地传递给PortQry,并最终显示PortQry帮助屏幕 以下是我的功能: Function CheckPorts($x,$y,$z) { PortQry -n $x -p $y -o $z | Out-File $ResultsFile -Append }

我正在尝试验证是否已实施了正确的防火墙规则,并且流是否正常工作。我已经找过了,似乎找不到解决办法。我正在使用PowerShell自动化服务器列表的PortQry请求(基于它的角色),这看起来很简单。但我似乎无法将参数正确地传递给PortQry,并最终显示PortQry帮助屏幕

以下是我的功能:

  Function CheckPorts($x,$y,$z) {
    PortQry -n $x -p $y -o $z | Out-File $ResultsFile -Append
    }
下面是我的ForEach循环,我使用它来迭代由CSV创建并导入的数组:

  $Type = TCP      
   Foreach ($Server in $ServerRoleArray.Role1) {
            if ($Server -ne "") {
            CheckPorts $Server $Type $Role1Ports
        }
新增信息: 似乎我没有从数组中正确提取
$Server
变量。这是我的意思:

$ServerRoleArray = Import-CSV $FilePath\Servers.csv
My Servers.csv看起来像:

Role1,Role2
google.com,msn.com
yahoo.com,

想法??顺便说一句,我在powershell v2和v3中尝试过这一点,我确信这是一个问题,即命令行参数被发送到
PortQry
看起来不像您期望的那样。 我仍然不知道你的
$Role1Ports
是什么样子的,所以这可能是你苦恼的根源。假设您已经这样声明了它
$Role1Ports=“80443”

需要在“TCP”上加引号,以便将其解释为字符串。我看到你的ForEach循环没有问题。我使用了您的测试示例数据,它处理得很好。我将
$z
包装在
CheckPorts
函数中,这样
z$
中的端口也应该正确传递。这是根据我在网上找到的PortQry的例子完成的

如果您的$Role1Ports看起来是这样的:
$Role1Ports=80443
或者是在某种形式的数组中,那么您可以执行这两种操作,我上面使用的代码仍然可以工作

$Role1Ports = $Role1Ports -join ","

$Role1Ports = 80,443 -join ","
您应该得到的命令输出如下所示

PortQry -n google.com -p TCP -o "80,443"
PortQry -n yahoo.com -p TCP -o "80,443"
因为其他答案

$Role1Ports = 80,443 -join ","
我不知道为什么你的逻辑有问题,因为它工作得很好。根据你的评论,我使用了不同的文本文件

Role1,Role2
,msn.com
google.com,
yahoo.com,

即使使用
if($Server-ne“”)
语句,它仍然有效<代码>如果($Server)也可以工作

我的ForEach循环是错误的。存在2个问题:首先,空检查不正确,对列的调用不正确。这是正确的循环:

ForEach ($Server in $ServerRoleArray) {
    if (!$Server.Role1) {
    break
    } else {
    CheckPorts $Server.Role1 "TCP" $Role1Ports
    }
}

第1步是强输入输入参数。其中一个可能是对象。在显示“帮助”屏幕之前,是否列出了错误?您是在尝试将数组传递给-o,还是在传递逗号分隔的值字符串?我没有收到错误。结果日志显示的信息与您键入错误的PortQry或help时的信息相同。我正在使用“”将逗号分隔的值字符串传递给-o。
$ports
$role1ports
的内容是什么?代码看起来不错,但是如果您正在获取输出的帮助菜单,那么您的命令行上似乎出现了格式问题。感谢您的响应。我已经尝试了
$Role1Ports=“80443”
以及
[string]$Role1Ports=80443
。即使在复制和粘贴您的代码之后,我也会继续出现错误。因此,为了好玩,我将我的函数脚本更改为
编写主机“PortQry-n$x-p$y-o$z”
,我怀疑PortQry没有正确接收主机名,这一点得到了证实。输出是
PortQry-n-ptcp-o80443
您的测试数据和示例是否不同?根据我的命令输出,它工作正常。这也很奇怪,因为你过滤掉了空的。这就是为什么我感到困惑。我的测试数据是在excel中创建的,并保存为CSV(不是记事本中的文本文件)。我粘贴的是在记事本中打开的右键单击>编辑的结果。那么,您仍然有问题吗?我有,这与从数组中提取数据有关。我使用
$serverrolarray=@(google.com,yahoo.com)
创建了一个平面阵列,一切正常。我当前的测试环境是PS v2 w/PortQry v2。您的
If
将与
If($Server.Role1)
一样工作,而不是如此消极。这就是我检查null的方式,因为我的另一个方法不起作用。它正在向函数传递null。