Динамически корректировать код на основе условия - PullRequest
0 голосов
/ 12 апреля 2020

Будучи учеником Powershell, я столкнулся с оператором -f формата . Затем я подумал, возможно ли динамически изменять код в зависимости от условия. Возьмем, к примеру, сценарий сопоставления дисков:

$creds = Get-Credential
$share_needs_creds = $true
$drive_map = New-Object -ComObject WScript.Network

if ($share_needs_creds){
     $drive_map.MapNetworkDrive('Z:', '\\server\share', $false, "$($creds.Username)", $($creds.GetNetworkCredential().Password)")
} else {
     $drive_map.MapNetworkDrive('Z:', '\\server\share', $false)
}

можно переписать следующим образом:

$creds = Get-Credential
$share_needs_creds = $true
$drive_map = New-Object -ComObject WScript.Network

if ($share_needs_creds){
     $condition_smart = ', "$($creds.Username)", $($creds.GetNetworkCredential().Password)"'
} else {
     $condition_smart = ''
}

$drive_map.MapNetworkDrive('Z:', '\\server\share', $false{0}) -f $condition_smart

Любой совет приветствуется!

1 Ответ

2 голосов
/ 12 апреля 2020

Это не сработает - оператор -f возвращает ровно 1 строку в качестве вывода - и вам нужно передать переменную количество аргументов в список параметров метода Вы вызываете.

Если вы хотите динамически вызывать метод для ComObject, подготовьте список аргументов в виде массива и передайте его в .Invoke() в имени метода, предоставляемого адаптером типа PowerShell:

$arguments = @(
    'Z:', '\\server\share', $false
    if($share_needs_creds){
        $creds.Username, $creds.GetNetworkCredential().Password
    }
)

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