Константа [PSCredential]::Empty
(она же [System.Management.Automation.PSCredential]::Empty
) дает допустимый объект типа PSCredential
, но для обоих username
и password
установлено значение null.
Однако это не учетные данные текущего пользователя; скорее это означает «нет полномочий». Там может быть логика в функции вы звоните, чтобы это было спорный вопрос (т.е. там, где функция это логика говорит, чтобы использовать текущий контекст безопасности при $credentials -eq [PSCredential]::Empty
), но в некоторых случаях это же значение может быть использовано для других цели (например, сказать, что вы хотите использовать анонимную аутентификацию).
Вы не можете получить учетные данные текущего пользователя, не запросив их или не назначив их явно другим способом; в противном случае это создаст угрозу безопасности
#create a credential object for demo purposes.
#Imagine that instead of this line we were saying `$credential = Get-CurrentUserCredential`
#(you have to imagine this, since no such function exists).
$credential = [PSCredential]::new('myUsername', ('superSecretPassword' | ConvertTo-SecureString -AsPlainText -Force))
#we can now see this user's password;
#someone malicious could have this script run under the current user's
#profile & have this information reported back to them.
$credential.GetNetworkCredential().Password
Если вы хотите запустить что-то от имени текущего пользователя, вы уже являетесь пользователем (т.е., следовательно, он является текущим пользователем); так что вам не нужно получать их учетные данные.
Тем не менее, бывают случаи, когда было бы неплохо иметь их полномочия; например если доступ к ресурсу, который не использует текущий пользовательский контекст / требует явных учетных данных. В таких случаях вам нужно либо запросить учетные данные (Get-Credential $env:username
), либо прочитать их с какого-либо ресурса (см. https://stackoverflow.com/a/6240319/361842).
Здесь есть очень подробное объяснение учетных данных: http://duffney.io/AddCredentialsToPowerShellFunctions; определенно стоит прочитать.