Как вы запускаете Cleanmgr.exe удаленно? - PullRequest
0 голосов
/ 14 февраля 2020

У меня возникли проблемы с удаленным запуском Clean Manager на Windows 10. Я видел несколько разных вещей, в которых вы могли редактировать реестр и изменять /sageset или /sagerun, чтобы указать c вещи, а затем запускать его удаленно, но, кажется, что независимо от того, что я делаю, CleanMgr запускается локально на моем машина, а не работает удаленно.

Я полагаю, что это самое близкое, что я получил, чтобы он работал удаленно ... Хотя, похоже, он все еще работает локально на моей машине.

Есть идеи?

(все переменные установлены перед этой частью скрипта, это лишь малая часть того, что происходит, на которой я застрял)

## Starts cleanmgr.exe
Function Start-CleanMGR {
    Write-Host "Please provide your A-Account details to continue with this cleanup."
    $creds = Get-Credential
    Enter-PSSession -ComputerName $computername -Credential $creds
    try {
        $cleanmgr = Start-Process -Credential $creds -FilePath "C:\Windows\System32\cleanmgr.exe" -ArgumentList '/verylowdisk' -Wait -Verbose
        if ($cleanmgr) {
            Write-Host "Clean Manager ran successfully!                                                                   " -NoNewline -ForegroundColor Green
            Write-Host "[DONE]" -ForegroundColor Green -BackgroundColor Black
        }
    }
    catch [System.Exception] {
        Write-host "Cleanmgr is not installed! To use this portion of the script you must install the following windows features:" -NoNewline -ForegroundColor DarkGray
        Write-host "[ERROR]" -ForegroundColor Red -BackgroundColor Black
    }
} Start-CleanMGR

Ответы [ 2 ]

0 голосов
/ 18 февраля 2020

PowerShell всегда запускается в пользовательском контексте пользователя, запустившего сеанс. Это сделано специально.

Вы не можете запустить приложение на основе GUI удаленно с помощью PowerShell. Это граница безопасности Windows.

Для запуска GUI приложений необходимо войти в систему, и вы не можете использовать PowerShell для запуска кода от имени вошедшего в систему пользователя.

Вы также запрашивают информацию, поэтому кто-то должен войти в систему.

Если вы ожидаете, что пользователь сохранит информацию, вам необходимо:

  1. Создать скрипт
  2. Развертывание сценария на компьютере пользователя или в общей папке, с которой он может быть запущен
  3. Скажите пользователю, как это сделать, или создайте пакетный файл, по которому он дважды щелкнет для запуска сценария PowerShell

Или

Установите сценарий для запуска в качестве запланированной задачи при входе в систему или в определенный момент в течение дня в качестве учетных данных пользователя.

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

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

Использование локальных переменных

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

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

Синтаксис использования следующий:

$Using:<VariableName>

Тем не менее, удаленная переменная - это не то, что вы будете делать в вашем случае использования, поскольку вы не можете делать то, что вы делаете изначально с PowerShell. Вам понадобится инструмент 3P, такой как MS SysInternals PSExe c, чтобы запускать код удаленно как зарегистрированный пользователь.

Использование PsExe c

Использование: psexe c [\ computer [, computer2 [, ...] | @file]] [- u user [-p psswd] [- ns] [- r имя_службы] [- h] [- l] [- s | -e] [- x] [- i [сессия]] [- c исполняемый файл [-f | -v]] [- каталог w] [- d] [-] [- an, n, ...] cmd [аргументы]

-i Запустить программу так что он взаимодействует с рабочим столом указанного сеанса в удаленной системе. Если сеанс не указан, процесс запускается в сеансе консоли.

-u Указывает необязательное имя пользователя для входа на удаленный компьютер.

0 голосов
/ 14 февраля 2020

Я предлагаю вам использовать Invoke-Command

Function Start-CleanMGR ($computername, $creds) {
        Invoke-Command -ComputerName $computername -Credential $creds -ScriptBlock {
        try {
            $cleanmgr = Start-Process -FilePath "C:\Windows\System32\cleanmgr.exe" -ArgumentList '/verylowdisk' -Wait -Verbose
            if ($cleanmgr) {
                return "Clean Manager ran successfully!"
            }
        }
        catch [System.Exception] {
            return "Cleanmgr is not installed! To use this portion of the script you must install the following windows features:"
        }
    }
}

Start-CleanMGR -computername "remotehost" -creds (Get-Credential)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...