выполнить команду перед обработкой параметров - PullRequest
0 голосов
/ 11 января 2019

Я написал скрипт, как показано ниже, но модуль AD PowerShell необходим, чтобы я создал функцию, которая проверяет команду и устанавливает функцию AD. Но мне нужно сделать это перед выполнением параметров, если я поставил свою функцию перед «param», что я получил ошибку. Кто-то знает, как я могу выполнить команду / функцию перед обработкой параметров?

Код скрипта:

Param(
    $user="user",
    $hosts = (Get-ADComputer -SearchBase 'ou=temp,dc=lab,dc=test,dc=com').Name,
    $credential = (Get-Credential -Message "Type user/pass  ")
)
Copy-Item -Path "path" -Destination "dest"

Код функции:

function GET-mandatory-modules {
    Write-Host "checking availability of necessery modules" -ForegroundColor Green
    #ad module
    if (!(Get-Command Get-ADComputer -ErrorAction SilentlyContinue)) {
        Write-Host "GET-ad-computer command unavailable, installing module AD-powershell" -ForegroundColor yellow
        Get-WindowsFeature |
            where name -like RSAT-AD-PowerShell |
            Install-WindowsFeature
    } else {
        Write-Host "ad-module is avialable, installation is not necessery"
    }
} #end function GET-mandatory-modules

Пример ошибки:


    $user="user",
+                 ~~~~~~~~~~~~~~~~~~~~~~~~~~
The assignment expression is not valid. The input to an assignment operator
must be an object that is able to accept assignments, such as a variable or
a property.

1 Ответ

0 голосов
/ 11 января 2019

Сценарий powershell всегда начинается с обработки параметров. Нет способа избежать этого. Но я не вижу необходимости добавлять $ hosts в параметры скрипта. Это можно сделать так:

param(
  $user="user",
  [PSCredential]$credential=(get-credential -message "Type user/pass  ")
)

Get-mandatory-modules
$hosts = (Get-ADComputer -SearchBase 'ou=temp,dc=lab,dc=test,dc=com').Name
Copy-item -path "path" -destination "dest"

Если вы все же хотите иметь возможность передавать организационную единицу в качестве параметра, вы можете сделать это в виде строки, которая используется в сценарии для получения имен компьютеров:

param(
  $user="user",
  $hostsou = 'ou=temp,dc=lab,dc=test,dc=com'
  [PSCredential]$credential=(get-credential -message "Type user/pass  ")
)

Get-mandatory-modules
$hosts = (Get-ADComputer -SearchBase $hostsou).Name
Copy-item -path "path" -destination "dest"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...