PowerShell - вызов команды на удаленных компьютерах / компьютерах - PullRequest
0 голосов
/ 09 марта 2020

Существует множество форумов / материалов по теме, но, похоже, не могу получить ответ на мою проблему.

Я пытаюсь выполнить скрипт с главного сервера (SRV01), который очистит временные папки на вторичных серверах (SRV02, SRV03).

Вот сценарий:

#Set the machines on the network to run the script on
$VDST = @("SRV02", "SRV03")

#Folder locations to clean out
$TempFolder = @("C:\Windows\Temp\*", "C:\Documents and Settings\*\Local Settings\temp\*")

#This function actually performs the clean up operation
Function executeCleanUp
    {
        $TempFolder = $args[0]
        $machineNames = $args[2]

        ForEach($machine in $machineNames){

            Get-PSSession -ComputerName $machine | Format-Table -Property ComputerName, InstanceID

            Write-Host 'Starting Clean Up...'

            #Loop through the sub folders in the registry location
            ForEach($folderLocation in $TempFolder)
            {
                $StrInput = 'Remove-Item -Path ' + $folderLocation + ' -Force -Recurse -ErrorAction SilentlyContinue'

                $action = New-ScheduledTaskAction -Execute 'PowerShell.exe' -Argument $StrInput 

                Register-ScheduledTask -Action $action -TaskName "CleanUp"

                Start-ScheduledTask -TaskName "CleanUp"

                Unregister-ScheduledTask -TaskName "CleanUp" -Confirm:$false -ErrorAction SilentlyContinue

            }
    }

#Execute Script on specified machines - provided in array above
Invoke-Command -ComputerName $VDST -ScriptBlock ${function:executeCleanUp} -ArgumentList $TempFolder, $VDST

После выполнения вышеуказанного я получаю сообщение об ошибке:

Указанный сеанс входа в систему не существует

Итак, я наткнулся на форум, где предлагалось сделать следующее:

#Remote Server (VDI)
Enable-WSManCredSSP -Role server

#Expected Output
#This computer is configured to receive credentials from a remote client computer.

#Local Machine
Enable-WSManCredSSP -Role Client -DelegatedCredentials 'SRV01'

#Expected Output
#The machine is configured to allow delegating fresh credentials to the following target(s): wsman/SRV01.

#Local Machine
#Open gpedit.msc 
#Browse to Computer Configuration > Administrative Templates > System > Credentials Delegation. 
#Double-click "Allow delegating fresh credentials with NTLM-only Server Authentication"
#Enable the setting 
#Add the build server to the server list as WSMAN/BuildServerName.

#Example Execution:
#Invoke-Command -ComputerName <REMOTE_COMPUTER_NAME> -Authentication CredSSP -Credential <USERNAME> -ScriptBlock { #code}

Я все это сделал, но теперь я получаю сообщение об ошибке:

Политика компьютера не позволяет делегировать учетные данные пользователя на целевой компьютер

Кроме того, я предполагаю строку

WSMAN / BuildServerName

должно быть написано

WSMAN / SRV02

1 Ответ

0 голосов
/ 09 марта 2020

Возникла проблема аутентификации с двумя прыжками, потому что вы пытаетесь перечислить удаленные сеансы в удаленном сеансе Get-PSSession -ComputerName $machine | Format-Table -Property ComputerName, InstanceID

Если вы просто хотите очистить некоторые файлы на удаленных серверах, приведенный ниже код должен работать с нет необходимости в CredSPP.

Установка -ErrorAction SilentlyContinue затруднит съемку. Проще проверить, существует ли файл, прежде чем пытаться его удалить.

$TempFolder = $args[0]
$ComputerArray = "SRV02","SRV03"
$ScriptBlock =
{

    foreach ($Folder in $TempFolders)
    {
        if (Test-Path -Path $TempFolder)
        {
            Remove-Item -Path $Folder -force
        }
    }
}

Invoke-Command -ComputerName $ComputerArray -ScriptBlock $ScriptBlock -ArgumentList $TempFolder

Неправильный ответ:

Ваш Проблема заключается в двухэтапной аутентификации. Вы не можете вкладывать удаленные сеансы с настройками по умолчанию windows. Хотя это не будет считаться наилучшей практикой, вы можете разрешить CredSSP обойти проблему.

https://docs.microsoft.com/en-us/windows/win32/secauthn/credential-security-support-provider

https://docs.microsoft.com/en-us/powershell/module/microsoft.wsman.management/enable-wsmancredssp?view=powershell-7

Не могли бы вы войти в SVR01, чтобы запустить скрипт, или запустить скрипт на целевых машинах со своего компьютера?

...