从第一个流水线参数

时间:2018-02-05 16:39:04

标签: 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) {
            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
}

当我运行它时,我得到了我需要的数据,但State是空白的。它位于Get-ClusterResource,但我正在寻找的IP就在Get-ClusterParameter

理想情况下,我想返回群集的名称,每个永久名称,它的IP以及它的当前状态,以便我可以看到活动IP是在主站点上还是在DR网站。

2 个答案:

答案 0 :(得分:1)

您对Invoke-Command的调用将Get-ClusterResource | Get-ClusterParameter次调用放入其自己的脚本块{...},然后将评估这些表达式的结果通过管道传输到Where-Object cmd。这可能不是预期的操作顺序。

使用管道中间位置的Select-Object cmdlet投影结果,以便在以后阶段访问所需的属性(未检查特定语法; YMMV):

Invoke-Command -ComputerName $box { Get-ClusterResource | Select-Object -Property State, @{Name="ClusterParameter";Expression = {(Get-ClusterParameter -InputObject $_) }}| Where-Object { $_.ClusterParameter.Name -eq ...

会产生如下对象:

State | ClusterParameter
------------------------
foo     ClusterParameter.ToString()

答案 1 :(得分:0)

几乎是最终的代码。它不是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
            }