Задать переменную среды на удаленном компьютере через PowerShell - PullRequest
1 голос
/ 17 октября 2019

Я пытаюсь установить переменную среды через TFS Releasemanagement, вызывая скрипт powershell, который должен открыть удаленный сеанс на компьютере и установить переменную среды.

param(
[Parameter(Mandatory=$true)][String]$RemoteComputers,
[Parameter(Mandatory=$true)][String]$UserName,
[Parameter(Mandatory=$true)][String]$Password,
[Parameter(Mandatory=$true)][String]$Environment
)

$credential = New-Object System.Management.Automation.PSCredential($UserName , (ConvertTo-SecureString -String $Password -AsPlainText -Force));
$remoteMachines = $RemoteComputers -split ","

$remoteMachines | ForEach-Object {
    $machineBlock = {
        $machineName = $args[0]
        $credentials = $args[1]

        Write-Host $machineName

        $scriptBlockSetEnvironmentVariable = {
            $environment = $args[0]

            Write-Host "ScriptBlockSetEnvi$environmentVariable $environment"
            [System.Environment]::SetEnvironmentVariable('ASPNETCORE_ENVIRONMENT', $environment , [System.EnvironmentVariableTarget]::Machine)
        }

        Write-Host "========================================================================================"
        Write-Host "@#@#@ Opening remote session to $machineName"
        $session = New-PsSession -ComputerName $machineName -Credential $credentials
        Invoke-Command -Session $session -ScriptBlock $scriptBlockSetEnvironmentVariable -ArgumentList $Environment
        Remove-PSSession -Session $session
        Write-Host "@#@#@ Session Closed"
        Write-Host "========================================================================================"
    }

    Write-Output "Starting job on $_"
    Start-Job -Name $_ -ScriptBlock $machineBlock -ArgumentList $_, $credential
}

Write-Host "Waiting for all jobs to finish"
Wait-Job -Name $remoteMachines
$remoteMachines | ForEach-Object {
    Write-Host "Getting output for $_"
    Receive-Job -Name $_
    Write-Host "------------------------------------------------"
}

При запуске скрипта из моегомашина, как это:

PS C: \ temp \ ps>. \ setEnvVarRemote.ps1 MYSERVER -UserName "MYUSERNAME" -Пароль "MYPASSWORD" -Environment "Test"

Я получаю следующий вывод

Starting job on MYSERVER

Id     Name            PSJobTypeName   State         HasMoreData     Location             Command
--     ----            -------------   -----         -----------     --------             -------
9      MYSERVER        BackgroundJob   Running       True            localhost            ...
Waiting for all jobs to finish
1      MYSERVER        BackgroundJob   Completed     False           localhost            ...
3      MYSERVER        BackgroundJob   Completed     False           localhost            ...
5      MYSERVER        BackgroundJob   Completed     False           localhost            ...
7      MYSERVER        BackgroundJob   Completed     False           localhost            ...
9      MYSERVER        BackgroundJob   Completed     True            localhost            ...
Getting output for MYSERVER
MYSERVER
========================================================================================
@#@#@ Opening remote session to MYSERVER
ScriptBlockSetEnvi
@#@#@ Session Closed
========================================================================================
------------------------------------------------

К сожалению, переменная окружения не установлена, и я не получаю сообщение об ошибке ... что я делаю не так?

У моего пользователя есть администраторправа и пароль верный.

Заранее спасибо

1 Ответ

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

Этого должно быть достаточно, вы чрезмерно усложняете код с использованием сеансов и вашего цикла Foreach-Object:

$result = Invoke-Command -ComputerName $remoteMachines -Credential $credentials -ArgumentList $Environment {
  [System.Environment]::SetEnvironmentVariable( 'ASPNETCORE_ENVIRONMENT', $args, [System.EnvironmentVariableTarget]::Machine )
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...