Powershell использует параметры «при запуске» для вызова функций в зависимости от того, какой параметр вызывается - PullRequest
0 голосов
/ 25 октября 2019

Как использовать параметры «при запуске» в качестве параметров в функции. Прямо сейчас мой код возвращает все данные / значения независимо от того, что вводится для параметров «при запуске».

Например, я хотел бы сопоставить $ Server_Name из параметров «at-run» с циклом foreach, чтобы возвращались только данные с совпадающим $ Server_Name.

function StartServer{

    Param (
        [Parameter (Mandatory=$true)] [STRING] $Region,
        [Parameter (Mandatory=$true)] [STRING] $Env,
        #[STRING] $Env,
        [Parameter (Mandatory=$true)] [STRING] $ScriptName, #$ScriptName 
        [Parameter (Mandatory=$true)] [STRING] $Server_Name
        #[STRING] $Server,
        #[STRING] $Services
    )
    #Write-Output ("Region: "+ $Region + " Env: " + $Env  + " ScriptName: " + $ScriptName + " Server_Name: " + $Server)

    #$startDate = Get-Date;

    $Sourcefile = "C:\Users\ Scripts\CLEAN10182019.csv"
    $StartProperties  = (Import-Csv $Sourcefile) 

    $Sorted = $StartProperties |select Server_Name,Service_Name, Start_Order, Start_Flag, Start_Wait  | Sort-Object -Property Server_Name, {[int]$_.Start_Order}|Format-Table
    #$Sorted

    foreach($line in $StartProperties)
        { 
        $Server_Name = [string]$line.'Server_Name'
        $Service_Name = [string]$line.'Service_Name'
        $Start_Order = [string]$line.'Start_Order'
        $Start_Wait= [string]$line.'Start_Wait' 

        $file = #"Matches? " + $Server_Name
                "Start " + $Service_Name + "  " + " Timeout " + $Start_Wait

        Write-Output $file 

        }


}
StartServer

Ответы [ 2 ]

0 голосов
/ 26 октября 2019

Если я вас правильно понимаю, вы хотите сопоставить только те строки CSV, столбец которых Server_Name соответствует значению параметра $Server_Name:

Import-Csv $Sourcefile | Where-Object Server_Name -eq $Server_Name | ForEach-Object {
  # Synthesize and output a filename.
  "Start " + $_.Service_Name + "  " + " Timeout " + $_.Start_Wait
}

Если вы хотите вывести синтезированную строку как часть объект , который будет представлен в виде в виде таблицы на выходе, выполните что-то вроде следующего:

Import-Csv $Sourcefile | Where-Object Server_Name -eq $Server_Name | ForEach-Object {
   # Create a custom object with the properties of interest:
  [pscustomobject] @{
    # Other properties
    Server_Name = $_.Server_Name # ...
    FileName = "Start " + $_.Service_Name + "  " + " Timeout " + $_.Start_Wait
  }
}

Если ваши выходные объекты имеют 4 или менее свойств, они автоматически печатает, как если бы они были переданы по каналу Format-Table, поэтому вы получите что-то вроде следующего:

Server_Name FileName
----------- --------
server1     Start service1   Timeout 20
server2     Start service2   Timeout 10
...
0 голосов
/ 26 октября 2019

Самым быстрым и простым способом, который я могу придумать, может быть выполнение кода только в том случае, если имя службы передано в -

foreach($line in $StartProperties) { 
    if ([string]$line.'Server_Name' -eq $Server_Name) {
        $Server_Name = [string]$line.'Server_Name'
        $Service_Name = [string]$line.'Service_Name'
        $Start_Order = [string]$line.'Start_Order'
        $Start_Wait= [string]$line.'Start_Wait' 

        $file = #"Matches? " + $Server_Name
                "Start " + $Service_Name + "  " + " Timeout " + $Start_Wait

        Write-Output $file 
    }

}

Похоже ли это на то, что вы ищете?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...