Подтвердить что ты не робот

Экземпляр с альтернативными учетными данными

Я использую CTP powershell v2. У меня есть script, который должен выйти на разные сетевые ресурсы в нашем dmz и скопировать некоторые файлы. Однако проблема заключается в том, что очевидно, что командлеты powershell, такие как экземпляр-элемент, тестовый путь и т.д., Не поддерживают альтернативные учетные данные...

У кого-нибудь есть предложение о том, как лучше всего выполнить мою задачу.?

4b9b3361

Ответ 1

Я столкнулся с этим недавно, и в последних версиях Powershell появился новый BitsTransfer Module, который позволяет передавать файлы с помощью BITS и поддерживает использование параметра -Credential.

В следующем примере показано, как использовать модуль BitsTransfer для копирования файла из общего сетевого ресурса на локальный компьютер с использованием указанного объекта PSCredential.

Import-Module bitstransfer
$cred = Get-Credential
$sourcePath = \\server\example\file.txt
$destPath = C:\Local\Destination\
Start-BitsTransfer -Source $sourcePath -Destination $destPath -Credential $cred

Другой способ справиться с этим - использовать стандартную команду "net use". Однако эта команда не поддерживает пароль "securestring", поэтому после получения объекта учетных данных вы должны получить расшифрованную версию пароля для перехода к команде "net use".

$cred = Get-Credential
$networkCred = $cred.GetNetworkCredential()
net use \\server\example\ $networkCred.Password /USER:$networkCred.UserName
Copy-Item \\server\example\file.txt C:\Local\Destination\

Ответ 2

Так как PowerShell не поддерживает использование "-Credential" через многие командлеты (очень раздражает), а сопоставление сетевого диска через WMI оказалось очень ненадежным в PS, я обнаружил, что предварительно кэширование учетных данных пользователя через сеть используйте команду для работы достаточно хорошо:

# cache credentials for our network path
net use \\server\C$ $password /USER:$username

Любая операция, использующая \\server\C $в пути, кажется, работает с помощью командлетов * -item.

Вы также можете удалить ресурс, когда закончите:

net use \\server\C$ /delete

Ответ 3

Это старый вопрос, но я просто обновляю его для будущих искателей.

Теперь PowerShell v3 поддерживает использование параметра -Credential для операций файловой системы.

Надеемся, что это поможет другим найти то же решение.

Ответ 4

Я бы попытался сопоставить диск с удаленной системой (используя "net use" или WshNetwork.MapNetworkDrive, оба метода поддерживают учетные данные), а затем используйте экземпляр.

Ответ 5

Теперь PowerShell 3.0 поддерживает учетные данные поставщика FileSystem. Чтобы использовать альтернативные учетные данные, просто используйте параметр Credential в командлете New-PSDrive

PS > New-PSDrive -Name J -PSProvider FileSystem -Root \\server001\sharename -Credential mydomain\travisj -Persist

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

$Source = "C:\Downloads\myfile.txt"
$Dest   = "\\10.149.12.162\c$\skumar"
$Username = "administrator"
$Password = ConvertTo-SecureString "Complex_Passw0rd" -AsPlainText -Force
$mycreds = New-Object System.Management.Automation.PSCredential($Username, $Password)

New-PSDrive -Name J -PSProvider FileSystem -Root $Dest -Credential $mycreds -Persist
Copy-Item -Path $Source -Destination "J:\myfile.txt"

Ответ 6

Я знаю, что теперь PowerShell 3 поддерживает это из коробки, но для записи, если вы застряли в PowerShell 2, вы в основном, нужно либо использовать устаревшую команду net use (как предложено несколькими другими), либо модуль олицетворения, который я написал, некоторое время назад специально для адреса это.

Ответ 7

Здесь - сообщение, в котором кто-то заставил его работать. Похоже, что это требует изменения реестра.

Ответ 9

Возвращение назад из мертвых. Я столкнулся с аналогичной проблемой учетных данных, упакованную .ps1 в пакетном файле и выполняя Win7, Shift + r.Click RunAs. Если вы этого захотите, вы также можете использовать PsExec:

psexec.exe /accepteula /h /u user /p pwd cmd /c "echo. | powershell.exe -File script.ps1"

Ответ 10

Здесь мой script, который работает как локальная система на компьютере, но для получения доступа к сетевому файлу требуется учетная запись пользователя domaim. Он позволяет хранить пароль пользователя в "защищенном" зашифрованном файле; который может быть прочитан только пользователем, который его написал.

Установка и изменение пароля выполняется путем копирования файла с открытым текстом на него в машину. При следующем запуске script он считывает пароль, шифрует его и удаляет пароль открытого текста.

$plaintext_password_file = 'C:\plaintext.txt' # Stores the password in plain text - only used once, then deleted
$encryted_password_file = 'C:\copy_pass.txt'  # Stores the password in "safe" encrypted form - used for subsequent runs of the script
                                              #   - can only be decrypted by the windows user that wrote it
$file_copy_user = 'OURDOMAIN\A_User'

# Check to see if there is a new plaintext password
if (Test-Path $plaintext_password_file)
{
    # Read in plaintext password, convert to a secure-string, convert to an encrypted-string, and write out, for use later
    get-content $plaintext_password_file | convertto-securestring -asplaintext -force | convertfrom-securestring | out-file $encryted_password_file
    # Now we have encrypted password, remove plain text for safety
    Remove-Item $plaintext_password_file
}


# Read in the encrypted password, convert to a secure-string
$pass = get-content $encryted_password_file | convertto-securestring

# create a credential object for the other user, using username and password stored in secure-string
$credentials = new-object -typename System.Management.Automation.PSCredential -argumentlist $file_copy_user,$pass

# Connect to network file location as the other user and map to drive J:
New-PSDrive -Name J -PSProvider FileSystem -Root "\\network\file_directory" -Credential $credentials

# Copy the file to J:
Copy-Item -Force -Verbose -Path "C:\a_file.txt" -Destination "J:\"

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

Ответ 11

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

Похоже, что они здесь, копия, безусловно, содержит параметр -Credential.

PS C:\> gcm -syn copy-item
Copy-Item [-Path] <String[]> [[-Destination] <String>] [-Container] [-Force] [-Filter <String>] [-I
nclude <String[]>] [-Exclude <String[]>] [-Recurse] [-PassThru] [-Credential <PSCredential>] [...]

Ответ 12

Вы должны иметь возможность передавать любые учетные данные, которые вы хотите использовать для параметра -Credential. Так что-то вроде:

$cred = Get-Credential

[Введите учетные данные]

Копировать-Item -Path $from -Destination $to -Credential $cred