首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在PortQry中传递PowerShell参数

在PortQry中传递PowerShell参数
EN

Stack Overflow用户
提问于 2014-09-12 20:47:05
回答 2查看 2.1K关注 0票数 0

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

这是我的功能:

代码语言:javascript
复制
  Function CheckPorts($x,$y,$z) {
    PortQry -n $x -p $y -o $z | Out-File $ResultsFile -Append
    }

下面是我的ForEach循环,用于遍历由CSV创建并导入的数组:

代码语言:javascript
复制
  $Type = TCP      
   Foreach ($Server in $ServerRoleArray.Role1) {
            if ($Server -ne "") {
            CheckPorts $Server $Type $Role1Ports
        }

添加了信息:,似乎我没有正确地从数组中提取$Server变量。这是我的进口:

代码语言:javascript
复制
$ServerRoleArray = Import-CSV $FilePath\Servers.csv

我的Servers.csv看起来像:

代码语言:javascript
复制
Role1,Role2
google.com,msn.com
yahoo.com,

思想??顺便说一句,我已经在powershell v2 & v3中尝试过了

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-09-15 02:55:05

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

代码语言:javascript
复制
ForEach ($Server in $ServerRoleArray) {
    if (!$Server.Role1) {
    break
    } else {
    CheckPorts $Server.Role1 "TCP" $Role1Ports
    }
}
票数 0
EN

Stack Overflow用户

发布于 2014-09-13 17:33:17

我确信,这是一个向PortQry发送命令行参数的问题,而不是您所期望的那样。我仍然不知道你的$Role1Ports是什么样子,所以这可能是你痛苦的根源。假设你把它声明成这个$Role1Ports = "80,443"

代码语言:javascript
复制
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或者是以某种形式的数组,那么您可以这样做,我上面使用的代码仍然可以工作。

代码语言:javascript
复制
$Role1Ports = $Role1Ports -join ","

代码语言:javascript
复制
$Role1Ports = 80,443 -join ","

您应该得到的命令输出如下所示。

代码语言:javascript
复制
PortQry -n google.com -p TCP -o "80,443"
PortQry -n yahoo.com -p TCP -o "80,443"

,因为有其他答案,

我不知道为什么你的逻辑有问题,因为它运行良好。根据您的评论,我使用了一个不同的文本文件。

代码语言:javascript
复制
Role1,Role2
,msn.com
google.com,
yahoo.com,

即使使用if ($Server -ne "")语句,它仍然有效。if ($Server)也能发挥作用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25816567

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档