Powershell передает переменные удаленному скрипту

У меня есть следующий файл cmd: -

PowerShell.exe -noexit E:\wwwroot\domains\processes\AddDirectory.ps1 -Param testdomain.co.uk

который проходит в: -

$Session = New-PSSession -ComputerName 192.168.0.25
$script = {
Param($Param1)
set-executionpolicy unrestricted -force

# Set Variables
$domain = $Param1
$sitepath = "e:\domains\" + $domain

# Check for physical path
if (-not (Test-Path -path $sitePath))
{
New-Item -Path $sitepath -type directory 
New-Item -Path $sitepath\wwwroot -type directory 
}
set-executionpolicy restricted -force     
}
Invoke-Command -Session $Session -ScriptBlock $script

Но он просто работает, но ничего не делает.

Если я объявляю переменную $ domain как $ domain = 'testdomain.co.uk', она работает, но не хочет проходить через var из файла cmd. Что я делаю неправильно? Я пытался поместить его в Invoke-Command как -ArgumentsList - $ Param1, но это тоже не работает ...

Любые идеи были приняты с удовольствием

Спасибо Пол

Обновление - я обновил свой код, как показано ниже, но возникла такая же проблема: -

param($domainName)
$script = {
    Param($Param1)
    set-executionpolicy unrestricted -force
    # Set Variables
    $domain = $Param1
    $sitepath = "e:\domains\" + $domain
    # Check for physical path
    if (-not (Test-Path -path $sitePath))
    {
        New-Item -Path $sitepath -type directory
        New-Item -Path $sitepath\wwwroot -type directory
        New-Item -Path $sitepath\db -type directory
        New-Item -Path $sitepath\stats -type directory
    }
    set-executionpolicy restricted -force
}

$Session = New-PSSession -ComputerName 192.168.0.25

Invoke-Command -Session $Session -ScriptBlock $script -ArgumentList $domainName

person Paul    schedule 23.10.2012    source источник
comment
Является ли e: локальным или подключенным к сети диском. Если это последнее, возможно, вы столкнулись с проблемой двойной аутентификации.   -  person Keith Hill    schedule 24.10.2012


Ответы (1)


Вам нужно использовать блок param в скрипте, аргумент, который вы передаете файлу, будет назначен для $ domainName, и вы будете использовать его для передачи значения в скриптовый блок:

PowerShell.exe -noexit E:\wwwroot\domains\processes\AddDirectory.ps1 testdomain.co.uk


# script file

param($domainName)

$script = {
    Param($Param1)

    ...
    $domain = $Param1
    ...   
}

$Session = New-PSSession -ComputerName 192.168.0.25
Invoke-Command -Session $Session -ScriptBlock $script -ArgumentList $domainName
person Shay Levy    schedule 23.10.2012
comment
хорошо, сейчас у меня есть следующий код, но он не работает - файл запускается, но ничего не происходит: - - person Paul; 23.10.2012
comment
param ($ domainName) $ script = {Param ($ Param1) set-executionpolicy unrestricted -force # Установить переменные $ domain = $ Param1 $ sitepath = e: \ domains \ + $ domain # Проверить физический путь if (-not (Test -Path -path $ sitePath)) {New-Item -Path $ sitepath -type каталог New-Item -Path $ sitepath \ wwwroot -type directory New-Item -Path $ sitepath \ db -type directory New-Item -Path $ sitepath \ stats -type directory} set-executionpolicy limited -force} $ Session = New-PSSession -ComputerName 192.168.0.25 Invoke-Command -Session $ Session -ScriptBlock $ script -ArgumentList $ domainName - person Paul; 23.10.2012
comment
Привет - обновленный код в начальном вопросе, так как он не позволяет мне правильно форматировать в поле для комментариев ... - person Paul; 24.10.2012
comment
Теперь это работает - в моем файле cmd у меня был * .ps1 -param testdomain.co.uk. Я вынул -парам, и он работает - большое спасибо! - person Paul; 24.10.2012