我正在试着验证正确的防火墙规则已经实现,并且流是可以运行的。我已经找过了,似乎找不到我的解决办法。我使用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我的Servers.csv看起来像:
Role1,Role2
google.com,msn.com
yahoo.com,思想??顺便说一句,我已经在powershell v2 & v3中尝试过了
发布于 2014-09-15 02:55:05
我的ForEach循环是错误的。存在两个问题:第一,空检查不正确,对列的调用不正确。这是正确的循环:
ForEach ($Server in $ServerRoleArray) {
if (!$Server.Role1) {
break
} else {
CheckPorts $Server.Role1 "TCP" $Role1Ports
}
}发布于 2014-09-13 17:33:17
我确信,这是一个向PortQry发送命令行参数的问题,而不是您所期望的那样。我仍然不知道你的$Role1Ports是什么样子,所以这可能是你痛苦的根源。假设你把它声明成这个$Role1Ports = "80,443"
Function CheckPorts($x,$y,$z) {
PortQry -n $x -p $y -o `"$z`" | Out-File $ResultsFile -Append
}
$ServerRoleArray = Import-Csv C:\temp\server.tkt.txt
$Role1Ports = "80,443"
$Type = "TCP"
Foreach ($Server in $ServerRoleArray.Role1) {
if ($Server -ne "") {
CheckPorts $Server $Type $Role1Ports
}
}需要将引号放在"TCP"上,以便将其解释为字符串。我可以看到,您的ForEach循环没有什么问题。我使用了您的测试示例数据,它处理得很好。我将$z封装在CheckPorts函数中,以便正确地传递z$中的端口。这是按照我在网上找到的PortQry的例子所做的
如果您的$Role1Ports看起来是这样的:$Role1Ports = 80,443或者是以某种形式的数组,那么您可以这样做,我上面使用的代码仍然可以工作。
$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",因为有其他答案,
我不知道为什么你的逻辑有问题,因为它运行良好。根据您的评论,我使用了一个不同的文本文件。
Role1,Role2
,msn.com
google.com,
yahoo.com,即使使用if ($Server -ne "")语句,它仍然有效。if ($Server)也能发挥作用。
https://stackoverflow.com/questions/25816567
复制相似问题