powershell - Invoke-VMScript:不确认/重新输入访客凭据
问题描述
我正在对我们环境中的虚拟机进行审计,并使用 Invoke-VMScript 获取磁盘信息:
$vmErrors = New-Object System.Collections.Generic.List[System.Object]
$report = foreach ($VM in $VMs){
$name = $vm.Name
Write-Host "Retrieving data for $name... " -NoNewline
try{
$output = Invoke-VMScript -ScriptText @'
Get-Disk | Foreach-Object{
[PSCustomObject]@{
ComputerName = $env:COMPUTERNAME
Number = $_.number
Size = [int]($_.size/1GB)
PartitionStyle = $_.PartitionStyle
}
} | ConvertTo-Csv -NoTypeInformation
'@ -VM $name -GuestUser $Username -GuestPassword $Password -WarningAction SilentlyContinue -ErrorAction Stop
if($output.ScriptOutput -match 'PartitionStyle')
{
$output.ScriptOutput -replace '(?s)^.+(?="Com)' | ConvertFrom-Csv
}
Write-Host "Done" -ForegroundColor Green
}catch{
$vmErrors.Add($name)
Write-Host "Error!" -ForegroundColor Red
}
}
在 Powershell ISE 中运行代码时,我不需要确认每个 VM 的凭据,并且脚本循环非常好,但是如果我在标准 Powershell 窗口中运行脚本,我必须为每个 VM 输入用户名和密码每个 VM(凭据将始终与我用于向 vCenter 服务器进行身份验证的凭据相同。例如:
Retrieving data for VM NAME...
Specify Credential
Please specify guest credential
User:
如何在正常窗口中运行它并避免每次都重新输入我的凭据?
编辑
设置用户名和密码的示例:
$Username = ""
$Password = ""
Function GetUser{
do{
$global:Username = Read-Host "What is your username? (DOMAIN\Username)"
}while($global:Username -eq "")
}
Function GetPassword{
do{
$global:Password = Read-Host "What is your password?" -AsSecureString
$global:Password = [Runtime.InteropServices.Marshal]::PtrToStringAuto([Runtime.InteropServices.Marshal]::SecureStringToBSTR($global:Password))
}while($global:Password -eq "")
}
解决方案
通过更改 Invoke-VMScript 中的凭据引用以使用$global:Username
和解决$global:Password
推荐阅读
- c - 声明和定义存储在哪里?
- python - 使用scrapy获取url列表,然后只发送不在给定列表中的请求
- flutter - 检查 Firebase 用户是否在 Flutter 中首次使用 google 进行身份验证
- swift - dateDecodingStrategy 显示不正确的年份
- python - 难以理解计算变换网格的 Python 代码
- android - 将 Gradle 和 Android Studio 更新到 3.5 后复制 Hamcrest 和 JUnit 类
- html - 如何将链接的图像/gif 添加到更大的图像上?
- angular - Angular 应用程序因 JitCompiler 错误而崩溃
- firebase - Firestore - 如果需要,在删除时替换集合文档
- c++ - 如何将派生类的 std::list 而不是父类的 std::list 传递给函数?