标签: powercli

使用批处理文件 (.bat) 运行 PS1 脚本

目前以下是我启动 VMware vSphere PowerCLI 命令提示符的路径。我希望sample.ps1使用批处理文件自动运行我的脚本。如何sample.ps1合并到此路径并创建批处理文件?

C:\WINDOWS\system32\WindowsPowerShell\v1.0\powershell.exe -psc "C:\Program Files\VMware\Infrastructure\vSphere PowerCLI\vim.psc1" -noe -c ". \"C:\Program Files\VMware\Infrastructure\vSphere PowerCLI\Scripts\Initialize-PowerCLIEnvironment.ps1\""
Run Code Online (Sandbox Code Playgroud)

powershell vmware batch-file virtual-machine powercli

5
推荐指数
1
解决办法
4万
查看次数

如何在 asp.net mvc 中执行 Powershell 和 Powercli 命令时设置超时

我正在开发一个 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)

c# asp.net asp.net-mvc powershell powercli

5
推荐指数
1
解决办法
4570
查看次数

列出 VM 及其集群

我想连接到多个 VIserver 并列出所有 VM + 它们各自的集群。这可能吗?

我已经到了Get-VM | Select Name,VMHost。代替 VMHost 的哪些属性会列出集群?

powershell powercli vsphere

5
推荐指数
1
解决办法
9597
查看次数

是否可以使用之前的 Get 命令输出自动完成 Read-Host 提示。不保存输出文件

我正在编写一个脚本来部署 VM 主机,我想运行 Get 命令来向它们显示可用选项,然后将其输入与之前 GET 命令的自动完成一起使用。我这样做是因为我想避免手动输入期间可能出现的任何拼写错误。

我尝试过使用 Select-string 但我认为它会保存到 .txt 文件,并且我不希望将其保存在 txt 文件中。我宁愿将其保存在变量中。

Get-VMHost | Select-Object -Property Name | Format-Table -Property Name
$VMHost = Read-Host -Prompt 'Please select the host for your VM
Run Code Online (Sandbox Code Playgroud)

我希望用户能够使用先前执行的 GET 命令的输出自动完成字符串。如果可以的话请帮忙

powershell powercli

5
推荐指数
1
解决办法
2271
查看次数

那么Powershell PSC1 文件有什么特别之处呢?

在我的 PowerShell 快捷方式上,我有以下内容:

C:\WINDOWS\system32\WindowsPowerShell\v1.0\powershell.exe -psc "C:\Program Files (x86)\VMware\Infrastructure\vSphere PowerCLI\vim.psc1" -noe -c ". \"C:\Program Files (x86)\VMware\Infrastructure\vSphere PowerCLI\Scripts\Initialize-PowerCLIEnvironment.ps1\""
Run Code Online (Sandbox Code Playgroud)

然而,我更愿意添加管理单元的注册并将 PowerCLI 环境的 init 运行到我的配置文件中。

所以在我的个人资料中,我添加了以下内容:

Add-PSSnapin VMware.VimAutomation.Core
& "C:\Program Files (x86)\VMware\Infrastructure\vSphere PowerCLI\Scripts\Initialize-PowerCLIEnvironment.ps1"
Run Code Online (Sandbox Code Playgroud)

但是,使用此方法无法再使用 Get-VICommand。为什么?

powershell powercli

4
推荐指数
1
解决办法
1万
查看次数

在PowerShell单行中舍入一个数字

我正在使用VMWare的PowerCLI来运行此命令以从vCenter输出各种库存.

Get-VM | Select-Object Name,MemoryGB,NumCpu,UsedSpaceGB,@{n="TotalHDSizeGB"; e={(Get-HardDisk -VM $_ |Measure-Object -Sum CapacityGB).Sum}},@n="Network"; e={(Get-NetworkAdapter -VM $_ |Select -unique -expand NetworkName)}}Sort-Object Network|Export-Csv -Path vms.csv
Run Code Online (Sandbox Code Playgroud)

我想绕过UsedSpaceGB并列出所有NetworkName值,而不只是一个.我已经看到如何使用[Math] :: Round()来舍入脚本中的数字,但我无法在命令行中找到一个示例,我的尝试未能完成所需的结果.我怎么做?

powershell vmware rounding powercli vcenter

4
推荐指数
1
解决办法
6199
查看次数

Powershell关闭VM

我有一个小的Powershell脚本,用于在发生长时间断电时关闭我的虚拟机.它需要一个特定的VM对象并强制关闭.

Function DirtyShutdown
{ param([VMware.VimAutomation.ViCore.Impl.V1.Inventory.VirtualMachineImpl]$VM )
$VM | Stop-VM -Confirm:$false
}
Run Code Online (Sandbox Code Playgroud)

我想使用start-job命令加速此过程并行运行所有这些任务.我尝试过使用以下几种变体,我认为这些变体是正确的.

Start-Job -InputObject $VM -ScriptBlock{ $input | Shutdown-VMGuest -Confirm:$false }
Run Code Online (Sandbox Code Playgroud)

基于Receive-Job输出,看起来问题是在Start-Job的上下文中没有加载正在使用的管理单元(在调用上述函数之前添加).

实现这一目标的正确语法是什么?

powershell vmware powershell-2.0 powercli

3
推荐指数
1
解决办法
4530
查看次数

如何搜索对象数组包含另一个数组中的项?

我有两个数组.

包含虚拟机信息的对象数组,称为$vms其中一个属性Name.这是类型:

PowerCLI > $vms.GetType()

IsPublic IsSerial Name                                     BaseType
-------- -------- ----                                     --------
True     True     Object[]                                 System.Array
Run Code Online (Sandbox Code Playgroud)

我有一个从CSV文件导入的另一个数组,$importVMs其中一个字段也被调用Name.

如果$importVMs.Name不存在,我想做一些工作$vms(即它不匹配任何$vms.Name).我想知道我是否可以使用流水线操作,或者我是否必须遍历两个数组?

我能做点什么吗 if (! $vms | ? {$_.Name -neq $importVms.Name) { # work }

似乎无法让它发挥作用.我需要foreach$importVmsif条件?

编辑

到目前为止我的完整脚本:

Connect-VIServer -Server vCenter -Protocol https -Force | out-null
$importVms = Import-Csv vCenterVMs.csv
$VMHost = "esxi"
$currentVms = Get-VM
Write-Host "Current registered VMs" -ForeGroundColor Cyan
$currentVMs …
Run Code Online (Sandbox Code Playgroud)

powershell vmware powershell-2.0 powercli

3
推荐指数
1
解决办法
1万
查看次数

Where-Object:无法绑定参数“FilterScript”

我有一个问题有两个问题。我有以下 powercli cmd:

$snapLst = Get-VM vmindev |Get-Snapshot |Select VM, Name, Description, `
 @{Name='Created'; Expression={{$_.Created.ToString("yyMMdd")}}, `
 @{Name='SizeMB'; Expression={[int] $_.SizeMB}}
$resultLst=$snapLst| where SizeMB -gt 1000 |Sort-Object SizeMB |`
 Select @{Name='Type'; Expression={'BIG'}},*
Run Code Online (Sandbox Code Playgroud)

当在我的 DEV 环境(连接到 vSphere 服务器的桌面上的 powercli 会话)中运行时,一切都很好。在生产环境中运行时(即 vSphere 服务器上的 powercli 会话),我收到以下错误:

Where-Object : Cannot bind parameter 'FilterScript'. Cannot convert the "SizeMB" value of type "System.String" to type System.Management.Automation.ScriptBlock".
    At C:\Users\kness\Scripts\sn2.ps1:32 char:27
    + $resultLst=$snapLst| where <<<<  SizeMB -gt 1000 |Sort-Object SizeMB |Select
    @{Name='Type'; Expression={'BIG'}},
        + CategoryInfo          : InvalidArgument: (:) [Where-Object], ParameterBindingException …
Run Code Online (Sandbox Code Playgroud)

powershell powercli

3
推荐指数
1
解决办法
5013
查看次数

如何在powershell脚本中获取对象的键和值的数组?

我有一个以下格式的对象数组

\n
$test = @(2 :{1,3,5}, 3 : {2,4,6})\n
Run Code Online (Sandbox Code Playgroud)\n

我想从 $test 数组中提取键和值的对象。

\n

这是我执行上述任务的 powershell 脚本,

\n
$testnumbers = @(2,3)\n$testStores = @{}\n$testInfo = $null\nforeach ($tn in $testnumbers) {\n    $testInfo = @{}\n    for($i=0;$i -lt $tn;$i = $i+1) {\n    $testPrompt = Read-Host -Prompt "Assign the test numbers"\n    $testInfo += $testPrompt\n    }\n$testInfoSet = {$tn = $testInfo}\n$testInfoObj = New-Object psobject \xe2\x80\x93Property $testInfoSet\n$testStores += $testInfoObj\n}\n
Run Code Online (Sandbox Code Playgroud)\n

请提供解决方案,先谢谢了!

\n

powershell powershell-2.0 powercli powershell-3.0

2
推荐指数
1
解决办法
9234
查看次数