Powershell 从第一个流水线参数中选择值
我编写了一个PowerShell脚本来获取一些集群信息。我需要的一列来自管道中的第一个参数,我找不到返回其值的方法Powershell 从第一个流水线参数中选择值,powershell,Powershell,我编写了一个PowerShell脚本来获取一些集群信息。我需要的一列来自管道中的第一个参数,我找不到返回其值的方法 function Get-SQL-Clusters { Param([string]$server) $servers = Get-Content -LiteralPath "C:\temp\sql_clusters.txt" if ($server -ne 1) { $files = foreach ($box in $servers)
function Get-SQL-Clusters {
Param([string]$server)
$servers = Get-Content -LiteralPath "C:\temp\sql_clusters.txt"
if ($server -ne 1) {
$files = foreach ($box in $servers) {
Invoke-Command -ComputerName $box {
Get-ClusterResource | Get-ClusterParameter
} | Where-Object {
$_.Name -eq "Address"
} | Format-Table PSComputerName, ClusterObject, State, Name, Value -AutoSize
}
} else {
Write-Warning "'$server' is not a valid path."
}
return $files
}
当我运行这个时,我得到了我需要的数据,但状态为空。它位于Get-ClusterResource中,但我主要寻找的IP位于Get-ClusterParameter中
理想情况下,我希望返回集群的名称、每个alwayson名称、它的IP和它的当前状态,以便我可以查看活动IP是在主站点上还是在DR站点上。调用Invoke命令将Get ClusterResource | Get ClusterParameter调用放入它自己的脚本块{…},然后将计算这些表达式的结果传递到Where对象cmd。这可能不是预期的操作顺序
使用Select Object cmdlet在管道的中间位置投影结果,以便在以后的阶段访问所需的属性特定语法尚未检查;YMMV:
调用命令-ComputerName$box{Get ClusterResource |选择对象-属性状态,@{Name=ClusterParameter;表达式={Get ClusterParameter-InputObject${}}}}|其中对象{$$\.ClusterParameter.Name-eq
将生成以下对象:
State | ClusterParameter
------------------------
foo ClusterParameter.ToString()
这几乎是最后一段代码。虽然还没有100%完成,但我现在得到了状态和IP值,以后会修复其余的。我做的另一个更改是停止使用文本文件,并为我的服务器创建了一个哈希表,因为我的文本文件存在格式问题
function Get-SQL-Clusters-scrap
{
param([string]$server)
import-module c:\temp\sql_hashtable2.ps1
$servers = $sql_servers.hadr
if ($server -ne 1)
{
$files = ForEach ($box in $servers) {invoke-command -ComputerName $box {Get-ClusterResource |
foreach-object {($state) = ($_.State); $_ |
get-clusterparameter |Where-Object {$_.Name -eq "Address"} |
Format-Table ClusterObject,@{Name=”State”;Expression={$state}}, Name, Value, PSComputerName -AutoSize}}}
}
else
{Write-Warning "'$server' is not a valid path."}
return $files
}
我将不得不处理这个问题。部分问题是我在没有群集功能的服务器上运行该函数,这就是我使用invoke-command的原因。它不应该影响您编写其余命令的方式-这只是您将插入到您已经发布的内容中的内容。我将使用更多的locontext更新我的答案最终得到它w正在工作。在technet上发布了这篇文章,有人发布了几年前这个stackflow线程的链接。我使用了这个链接。玩弄了这些链接,但无法使其工作,所以我找到了一个我不再拥有的博客条目,并使其工作起来。我现在获得了状态和IP,但名称列为空,我将在明天或明天修复它下周。你可能想用绿色的勾号来标记这一点,作为你问题的答案