WS-Management:该服务配置为拒绝此插件的远程连接请求

WS-Management:该服务配置为拒绝此插件的远程连接请求

我正在编写一个 Powershell 脚本,用于在远程服务器上安装 SQL Server。我有两台由同一个人同时构建的 VM 服务器,运行 Windows Server 2019。它们的 CPU 数量和安装的内存略有不同(应我的要求),但除此之外应该是相同的,尽管我已经在一台服务器上手动安装了该应用程序。脚本遵循的过程如下:

  1. 在远程服务器上创建远程会话和会话配置以解决双跳问题。
  2. 关闭会话并使用新创建的会话配置启动一个新会话。
  3. 从第三台服务器挂载 ISO(因此需要会话配置)。
  4. 运行安装。
  5. 卸载 ISO。
  6. 关闭会话

如果我针对一台服务器(我手动安装的那台)运行此程序,它工作得很好。如果我针对第二台服务器运行它,它将创建会话配置,但无法创建第二个远程会话。我所做的所有搜索都显示“WS-Management 服务配置为不接受任何远程 shell 请求”,但这不是我的问题。我可以连接并创建/更新会话配置,但第二次连接尝试失败,并显示消息“服务配置为拒绝此插件的远程连接请求“,我找不到任何关于此的信息。

以下是脚本的相关部分:

# Start remote session $ServerName
$cred = Get-Credential $env:USERDOMAIN\$env:USERNAME
$remote = New-PSSession -ComputerName $ServerName -Credential $cred
$ConfigurationName = "DBAdmin"

# Create configuration on remote server if one doesn't exist, else update it
# (This allows double-hop to installation media)
"Starting remote session ...."
Invoke-Command -Session $remote -ScriptBlock {
    param($configname, [PSCredential]$cred)
    $config = Get-PSSessionConfiguration -Name $configname
    if($config) {
        if($config.RunAsUser -ne $cred.UserName) {
            "Updating remote session configuration ...."
            Set-PSSessionConfiguration -Name $configname -RunAsCredential $cred
        }
    } else {
        "Creating remote session configuration ...."
        Register-PSSessionConfiguration -Name $configname -RunAsCredential $cred
    }
} -ArgumentList $ConfigurationName, $cred
# Stop remote session
Remove-PSSession -Session $remote

### Fails on this next line - on one server only ###
# Run installation on remote machine using configuration
$remote = New-PSSession -ComputerName $ServerName -Credential $cred -ConfigurationName $ConfigurationName

Invoke-Command -Session $remote -ScriptBlock {
    param($path, $params)
    
    # Mount ISO to drive letter
    "Mounting installation ISO ...."
    $isopath = $path + "*.iso"
    $iso = (Get-ChildItem -Path $isopath).Name
    $path += $iso
    $mnt = Mount-DiskImage -ImagePath $path -PassThru
    $drive = ($mnt | Get-Volume).DriveLetter

    # Check for PID
    if($params.Contains("pid-goes-here")) {
        $pidpath = $drive[0] + ":\x64\DefaultSetup.ini"
        $pidvalue = Get-Content -Path $pidpath | Where-Object {$_ -match "PID="} | ConvertFrom-StringData
        $params = $params.Replace("pid-goes-here", $pidvalue.PID)
        $params = $params.Replace("`"", "")
    }

    # Run installation
    "Running installation ...."
    # Write out command and parameters for testing
    Write-Host ($drive[0] + ":\setup.exe")
    Write-Host $params
    # Uncomment following line to actually run setup
    #Start-Process -FilePath ($drive[0] + ":\setup.exe") -ArgumentList $params -Wait

    # Un-mount ISO
    "Un-mounting ISO ...."
    $mnt = Dismount-DiskImage -ImagePath $path
} -ArgumentList $InstallMediaPath, $Parameters
# Stop remote session
"Closing remote session ...."
Remove-PSSession -Session $remote

有什么想法可以尝试吗?我已将组策略从未配置更新为启用以允许远程访问,尽管我不认为这是问题所在,而且这也没有帮助。这是我第一次尝试任何严肃的 Powershell 脚本,所以我可能会遗漏一些显而易见的东西。

我的下一步是像在第一台服务器上一样手动运行安装,如果它能正常工作,则尝试弄清楚它在做什么,因为手动安装违背了我的脚本的目的!

谢谢!

相关内容