You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用PowerShell在Azure虚拟机批量创建文件夹遇路径识别问题

解决Azure虚拟机批量创建文件夹的PowerShell问题

我来帮你搞定这个Azure VM批量创建文件夹的问题!你之前用本地Invoke-Command配合文本里的计算机名能成功,但用Azure命令获取VM时遇到名称/路径识别问题,核心原因是Azure上的VM资源名称只是门户标识,不是可直接远程访问的主机名/IP,而且远程连接Azure VM需要额外的网络和服务配置。

问题根源

你用Get-AzureRmVM拿到的是Azure平台上的VM资源名称,这个名称不等于VM的实际主机名或可解析的网络地址。Invoke-Command依赖WinRM服务和网络连通性,必须用VM的可访问IP地址或者公共DNS域名才能建立远程会话。

分步解决方案

1. 先确保Azure VM满足远程访问前提

  • 开启VM的WinRM服务:默认Azure Windows VM可能未开启WinRM,需要先配置
  • 配置网络安全组(NSG):添加入站规则允许WinRM端口(5985 HTTP或5986 HTTPS)
  • 确保VM有可访问地址:要么配置公共IP并设置DNS名称,要么在同一个VNet/VPN环境下使用私有IP

2. 正确获取Azure VM的可访问地址(替换你的Get-AzureRmVM写法)

注意:旧的AzureRm模块已被弃用,推荐升级到Az模块,以下示例使用Az模块:

# 登录Azure账户
Connect-AzAccount

# 获取目标资源组下的所有VM(也可获取订阅内全部VM)
$vms = Get-AzVM -ResourceGroupName "你的资源组名称"

# 提取每个VM的公共DNS域名(仅适用于配置了公共IP的VM)
$accessibleVmNames = $vms | ForEach-Object {
    # 获取VM关联的公共IP资源
    $nicName = $_.NetworkProfile.NetworkInterfaces.Id.Split('/')[-1]
    $publicIp = Get-AzPublicIpAddress -ResourceGroupName $_.ResourceGroupName -Name "$nicName-ip"
    # 返回公共DNS名称(过滤未配置的VM)
    $publicIp.DnsSettings.Fqdn
} | Where-Object { $_ -ne $null }

# 若在VNet内访问,可提取私有IP
$accessibleVmIps = $vms | ForEach-Object {
    $nic = Get-AzNetworkInterface -ResourceGroupName $_.ResourceGroupName -Name $_.NetworkProfile.NetworkInterfaces.Id.Split('/')[-1]
    $nic.IpConfigurations.PrivateIpAddress
}

3. 给Azure VM配置WinRM(若未配置)

如果VM未开启WinRM,用Azure自定义脚本扩展快速配置:

$vm = Get-AzVM -ResourceGroupName "你的资源组" -Name "目标VM名称"
Set-AzVMExtension -ResourceGroupName $vm.ResourceGroupName `
    -VMName $vm.Name `
    -Name "WinRMSetup" `
    -Publisher "Microsoft.Compute" `
    -ExtensionType "CustomScriptExtension" `
    -TypeHandlerVersion "1.10" `
    -SettingString '{"commandToExecute":"winrm quickconfig -quiet"}'

4. 用正确地址执行远程命令

把之前的$Comp替换成上面获取的$accessibleVmNames或$accessibleVmIps,再执行命令:

$c = Get-Credential -Credential domain\AdminUser
$s = $ExecutionContext.InvokeCommand.NewScriptBlock("mkdir c:\Whatyousaying")
Invoke-Command -ComputerName $accessibleVmNames -ScriptBlock $s -Credential $c

额外注意事项

  • 公网访问建议用HTTPS的WinRM(5986端口),需配置SSL证书提升安全性
  • 确保你使用的域账户或本地管理员账户拥有VM的管理员权限
  • 若连接失败,先测试端口连通性:Test-NetConnection -ComputerName "VM的FQDN" -Port 5985

内容的提问来源于stack exchange,提问作者Norrin Rad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 04:21:58