我正在尝试用C#编写一个相当简单的应用程序(或者至少,我认为应该很简单),为所有ESX服务器轮询vCenter,然后为所有VM调度每个ESX服务器.它将收集一些简单的实时统计数据并将其放入数据库中.容易腻,对吗?嗯.
我一直在努力弄清楚我应该使用哪个VMware API,而且我越来越困惑,我越是浏览VMware组织严密的文档站点.我已经阅读了大约60页的vSphere Web Services SDK Programmin指南,但仍然不知道如何获取数据(但我学到了很多关于VMware的字母表汤... yippie).
我的问题是:我应该将哪个VMware API用于专注于收集CPU,内存,网络和硬盘统计信息的只读应用程序?我需要从典型的vCenter +多ESX设置中收集此数据.
编辑:我忘了提到我已经成功编写了一个PowerCLI脚本来完成我所解释的内容,但它对于生产就绪的产品来说太慢而且不稳定(而PowerShell是,imo,一种设计糟糕的脚本语言).我确实有适用于.NET的VMware vSphere SDK,但提供的文档至少可以说是简短的.我错过了真正的vSphere SDK for .NET文档吗?
我试图使用命令Copy-Item
从远程机器到另一台远程机器:
Copy-Item -Path "\\machine1\abc\123\log 1.zip" -Destination "\\machine2\\c$\Logs\"
Run Code Online (Sandbox Code Playgroud)
我经常得到错误" Cannot find Path "\\machine1\abc\123\log 1.zip
"
我可以访问该路径并从那里手动复制.
我以管理员身份打开PowerCLI并运行此脚本......我绝对被困在这里,不知道如何解决它.
如何在使用以下cmdlet断开与PowerCLI中的服务器的连接时禁用提示?帮助文件显示了一个-Confirm选项,我没有使用它,所以我推断,如果没有它,应该没有提示,但我仍然会收到提示?
disconnect-viserver -server MyServer
谢谢
出于性能原因,我已经开始重写我的VMware每日报告以使用Get-View,而不是尽可能使用相关的PowerCLI命令.对此的一个小麻烦是返回的视图对象通常具有许多属性,其中许多属于对象本身.某些属性嵌套了四层或更多层.
所以我正在尝试创建一个函数,它将输出一个对象的所有属性,以及该属性的完整路径.然后可以将其传送到Where-Object,以便更轻松地查找特定属性.因此,要在$ v中存储的VMware.Vim.VirtualMachine对象上查找与Host相关的属性,我会输入以下内容:
Get-Properties -Object $v | ? {$_ -match "Host"}
Run Code Online (Sandbox Code Playgroud)
理想情况下,这将返回$ v的所有嵌套属性的列表,其中包含单词"Host".
我怎样才能做到这一点?
我需要将脚本文件夹永久添加到我的 PowerShell 路径(不仅仅是特定会话)。我正在运行以下代码:
[System.Environment]::SetEnvironmentVariable("PATH", $Env:Path + ";C:\scripts", "Machine")
Run Code Online (Sandbox Code Playgroud)
错误如下:
使用“3”个参数调用“SetEnvironmentVariable”时出现异常:“不允许请求的注册表访问。”
如何获得注册表访问权限/修复此问题?
编辑:不确定它是否有帮助,但我在 Windows Server 2012 上使用 PowerCLI(VMware PowerShell API)。
我有一个PowerCLI脚本,可以关闭VM的电源,更改其内存和CPU,然后重新打开电源。我修改了脚本以利用变量。所有这一切都完美。
我现在正在尝试修改脚本以利用阵列,以便在众多VM之间循环。关闭并打开虚拟机电源的脚本部分运行良好。
我遇到的麻烦是在foreach循环中使用两个数组中的变量。
对于$ vm_name中的每个VM,我需要设置在$ memory_gb中找到的相应内存量。
这就是我所拥有的(它目前为所有VM设置了相同数量的内存(“ 1”))。
$vm_name = @("OMAC-SBXWIN7AJM", "OMAC-SBXWIN2012R2AJM", "OMAC-SBXWIN2008R2AJM")
$memory_gb = 2,4,4
# SET THE VM MEMORY
Write-Host 'NOW SETTING THE VM MEMORY'
foreach ($objItem in $vm_name)
{Set-VM -VM $vm_name -MemoryGB 1 -confirm:$false
Break
}
Run Code Online (Sandbox Code Playgroud)
http://i.stack.imgur.com/E9hfY.png
...我尝试在第二个foreach循环中嵌套第二个,但无济于事。
如何编写脚本,以便$ vm_name中的每个VM获得在$ memory_gb中找到的相应内存量?
我试图根据PowerCLI中的IP地址找到特定的VM.我发现这个脚本通过PowerCLI在线抓取VM ipaddress
最初的问题解释了我遇到的问题,答案看起来解决了这些问题,但是当我运行这样的脚本时:
Get-View -ViewType VirtualMachine | Select @{N='IP';E={[string]::Join(',',$_.Guest.net.IPAddress)}}
Run Code Online (Sandbox Code Playgroud)
我得到的是以下输出:
IP
--
Run Code Online (Sandbox Code Playgroud)
就是这样......我错过了指定集群或DC的输入,这对其他人有用吗?
我无法在Start-Job中将数组传递给scriptblock.你能告诉我我可能做错了什么吗?
$bounceBlock = {
param(
[string[]]$list,
[System.Management.Automation.PSCredential]$cred
)
Add-PSSnapin VMware.VimAutomation.Core | Out-Null
Set-PowerCLIConfiguration -DefaultVIServerMode Multiple -Scope User -InvalidCertificateAction Ignore -Confirm:$false | Out-Null
Connect-VIServer -Server servername -Credential $cred -AllLinked
Get-VM -Name $list
}
if ($targets) {
$activeTargets = $targets | Get-Random -Count $prodTargets.Count
$counter = [pscustomobject] @{Value = 0}
$groupSize = 50
$groups = $activeTargets | Group-Object -Property {[math]::Floor($counter.Value++ / $groupSize)}
$connection = Connect-VIServer -Server servername -Credential $cred -AllLinked
if ($connection -match "servername") {
foreach ($group in $groups) {
while ((Get-Job …
Run Code Online (Sandbox Code Playgroud) 正如标题所示,我正在尝试使用 PowerCLI 登录 VMWare vSphere 服务器。即使我跑了Set-PowerCLIConfiguration -InvalidCertificateAction Ignore -Confirm:$false -Scope AllUsers
,当我尝试连接到服务器时,这就是我得到的:
Connect-VIServer -Server "foobar.server" -User ... -Password ...
Connect-VIServer : 3/30/2020 4:16:46 PM Connect-VIServer Error: Invalid server certificate. Use Set-PowerCLIConfiguration to set the value for the InvalidCertificateAction option to Prompt if you'd like to connect once or to add a permanent exception for this server.
Additional Information: Could not establish secure channel for SSL/TLS with authority 'foobar.server'.
At line:1 char:1
+ Connect-VIServer -Server "foobar.server" -User ... -Passw ... …
Run Code Online (Sandbox Code Playgroud) 我正在开发一个 ASP.NET MVC Web 应用程序,并且我有以下代码,它定义了服务器列表上的循环,并在我的 ASP.NET MVC 中为每个服务器执行 PowerCli 命令:-
//Start Loop
var shell = PowerShell.Create();
var shell2 = PowerShell.Create();
var shell3 = PowerShell.Create();
string PsCmd = "add-pssnapin VMware.VimAutomation.Core; $vCenterServer = '" + vCenterName + "';$vCenterAdmin = '" + vCenterUsername + "' ;$vCenterPassword = '" + vCenterPassword + "';" + System.Environment.NewLine;
PsCmd = PsCmd + "$VIServer = Connect-VIServer -Server $vCenterServer -User $vCenterAdmin -Password $vCenterPassword;" + System.Environment.NewLine;
PsCmd = PsCmd + "Get-VMHost " + System.Environment.NewLine;
string PsCmd2 = "add-pssnapin VMware.VimAutomation.Core; $vCenterServer …
Run Code Online (Sandbox Code Playgroud)