Передать параметры времени выполнения в PowerShell Script - PullRequest
0 голосов
/ 08 ноября 2018

У меня есть скрипт ниже PowerShell, который создает homedrive для пользователя,

Import-Module ActiveDirectory 2>&1 | Write-Host; 
if($?)
{

$homeDir = "\\CORP.com\HOME\Jdoe";
$user = "jdoe";
$domain = "Corp";

New-Item "$homeDir" -type directory;

$acl = Get-Acl "$homeDir";
$permission = "$domain\$user","FullControl", "ContainerInherit, ObjectInherit", "None", "Allow";
$accessRule = New-Object System.Security.AccessControl.FileSystemAccessRule $permission;

$acl.SetAccessRule($accessRule);

$acl | Set-Acl "$homeDir";
}

Значения в $ homeDir и $ User будут передаваться во время выполнения.

Как выполнить вышеуказанный скрипт вместе со значениями времени выполнения в атрибутах $ homeDir и $ User.

Я пытался выполнить,

. 'C:\hd.ps1' $homeDir = "\\CORP.com\HOME\test" $user = "test" ; без успеха.

Может кто-нибудь подсказать, что я делаю неправильно.

Ответы [ 2 ]

0 голосов
/ 08 ноября 2018

Почему ты это делаешь?

Import-Module ActiveDirectory 2>&1 | Write-Host; 

Если вы выполняете это на контроллере домена или если на вашей рабочей станции есть инструменты RSAT, если вы используете PowerShell v3 + или выше, он автоматически загружается при использовании командлета AD.

Также никогда не используйте Write-Host для чего-либо, что вам потребуется позже. Это очищает / очищает буфер. Write-Host подходит только для окраски текста или других потребностей форматирования в s

Сделайте коллекцию из файла, например, и просто прочитайте ее. Я просто использую список здесь:

$UserFile = @'
Property,Value
homeDir,\\CORP.com\HOME\Jdoe
user,jdoe
Targetdomain,Corp
'@ | ConvertFrom-Csv

# Results

Property     Value               
--------     -----               
homeDir      \\CORP.com\HOME\Jdoe
user         jdoe                
Targetdomain Corp 

Если вы делаете это с удаленного компьютера, то вы не сможете использовать локальные переменные в удаленном сеансе, пока не установите его область действия.

Get-Help about_remote_variables -Full

Об удаленных переменных

ПОЛНОЕ ОПИСАНИЕ

Вы можете использовать переменные в командах, которые вы запускаете удаленно компьютеры. Просто присвойте значение переменной, а затем используйте переменная на месте значения.

По умолчанию переменные в удаленных командах предполагаются определяется в сеансе, в котором выполняется команда. Вы также можете использовать переменные, которые определены в локальной сессии, но вы должны определить их как локальные переменные в команде.

ИСПОЛЬЗОВАНИЕ МЕСТНЫХ ПЕРЕМЕННЫХ

Вы также можете использовать локальные переменные в удаленных командах, но вы должен указывать, что переменная определена в локальном сеансе.

Начиная с Windows PowerShell 3.0, вы можете использовать модификатор области для определения локальной переменной в удаленной команде.

Точки с запятой не нужны в PowerShell, если элементы не находятся на одной строке.

Вы не можете назвать этот код таким образом ...

'C:\hd.ps1' $homeDir = "\\CORP.com\HOME\test" $user = "test"

... так как вы не указали никаких параметров в вашем коде.

Итак, как-то так ...

Примечание: я не в состоянии проверить это ... пожалуйста, делайте это только в тестовой среде Так что это не так ...

ForEach($UserLine in $UserFile)
{
    New-Item $UserLine.homeDir -type directory

    $acl = Get-Acl $UserLine.homeDir
    $permission = ($Using:UserLine.Targetdomain + '\' + $Using:UserLine.user),'FullControl', 'ContainerInherit, ObjectInherit', 'None', 'Allow'
    $accessRule = New-Object System.Security.AccessControl.FileSystemAccessRule $permission

    $acl.SetAccessRule($accessRule)

    $acl | Set-Acl $Using:UserLine.homeDir
}

Если вы хотите, чтобы это была параметризованная функция, то this.,.

Function New-ADUserHomeDirSettings
{
    [cmdletbinding()]

    Param
    (
        [string]$homeDir,
        [string]$user,
        [string]$Targetdomain
    )

    $acl = Get-Acl $UserLine.homeDir
    $permission = ($Using:UserLine.Targetdomain + '\' + $Using:UserLine.user),'FullControl', 'ContainerInherit, ObjectInherit', 'None', 'Allow'
    $accessRule = New-Object System.Security.AccessControl.FileSystemAccessRule $permission

    $acl.SetAccessRule($accessRule)

    $acl | Set-Acl $Using:UserLine.homeDir
}

New-ADUserHomeDirSettings -homeDir '' -user '' -Targetdomain ''
0 голосов
/ 08 ноября 2018

Put

param(
$homeDir,
$user
)

В верхней части скрипта и вызова с помощью

Powershell -File "C:\hd.ps1" -homeDir "\\CORP.com\HOME\test" -user "test" 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...