Powershell: найдите текущего пользователя, вошедшего в систему, и скопируйте уникальный файл с общего диска - PullRequest
0 голосов
/ 04 августа 2020

Название говорит большую часть этого. Я создал уникальные файлы для пользователей, которые будут запускать свои скрипты удаленно. Предполагается, что сценарий найдет имя текущего пользователя, вошедшего в систему, и скопирует этот уникальный файл в C: \ Users \ Publi c. Однако в настоящее время я столкнулся с проблемой, из-за которой в системе по умолчанию используется мое имя пользователя. Я пробовал несколько методов, полученных отсюда, и переполнение стека, и, похоже, не могу получить хороший результат, поскольку все заканчивают с моим уникальным файлом. Я пробовал следующее:

$env:username

$env:userprofile

$currentuser=[System.Security.Principal.WindowsIdentity]::GetCurrent().Name

Скрипт выглядит так:

$currentuser=[System.Security.Principal.WindowsIdentity]::GetCurrent().Name

if ($currentuser = "Domain/username1") {
copy-item -Path "shared network location\username1file" -Destination "C:\Users\Public"
}
elseif ($currentuser = "Domain\username2") {
copy-item -Path "shared network location\username2file" -Destination "C:\Users\Public"
}
elseif ($currentuser = "domain\username3") {
copy-item -Path "shared network location\username3file" -Destination "C:\Users\Public"
}

Может ли кто-нибудь дать мне совет, как это исправить?

1 Ответ

0 голосов
/ 05 августа 2020

Чтобы получить текущего пользователя, вошедшего в систему, а не пользователя, который в данный момент запускает скрипт, вы можете использовать WMI Win32_ComputerSystem.

Кроме того, я бы рекомендовал использовать switch вместо нескольких elseif:

$currentuser = (Get-WmiObject -Class Win32_ComputerSystem).UserName

$file = switch ($currentuser) {
    'Domain\username1' { "shared network location\username1file"; break }
    'Domain\username2' { "shared network location\username2file"; break }
    'Domain\username3' { "shared network location\username3file"; break }
    default { $null }
}

if ($file) {
    Copy-Item -Path $file -Destination "C:\Users\Public"
}
else {
    Write-Host "No file to copy defined for user '$currentuser'"
}
...