gpt4 book ai didi

windows - 新 WebBinding : Cannot retrieve the dynamic parameters for the cmdlet

转载 作者:可可西里 更新时间:2023-11-01 12:45:59 25 4
gpt4 key购买 nike

我们使用的是 Windows 2012 Server R2。

我们正在尝试自动创建 LetsEncrypt 证书。我们正在使用 LetsEncrypt-Win-Simple ( https://github.com/Lone-Coder/letsencrypt-win-simple )。

一旦创建了证书(通过 LetsEncrypt.exe),我们就有了一个被调用的 .bat 脚本(使用 --script 和 --scriptparameters 标志)。这会运行 powershell.exe 并尝试创建必要的 IIS 绑定(bind)。 .bat 文件中的行是:

powershell.exe -file c:\temp\SSLIISBinding.ps1 %1 %2 %3 %4

%1-4 是 LetsEncrypt 传入的参数。在 powershell 脚本中,我们尝试运行的命令是:

$iis_host_name = $args[0]
$iis_site_name = $args[1]
$certificate_hash = $args[2]
$certificate_store = $args[3]

"IIS Host Name: " + $iis_host_name
"IIS Site Name: " + $iis_site_name
"Certificate Hash: " + $certificate_hash
"Certificate Store: " + $certificate_store

$guid = [guid]::NewGuid().ToString("B")
netsh http add sslcert hostnameport="${iis_host_name}:443" certhash=$certificate_hash certstorename=$certificate_store appid="$guid"
New-WebBinding -name $iis_site_name -Protocol https -HostHeader $iis_host_name -Port 443 -SslFlags 1

args 被很好地传递到 .bat 中,因为我们输出它们并且它们正确显示。

如果我们单独运行 .bat 文件,它会完美运行。如果它被 LetsEncrypt.exe 调用,它会失败,并报告以下问题:

New-WebBinding : Cannot retrieve the dynamic parameters for the cmdlet.
Retrieving the COM class factory for component with CLSID
{688EEEE5-6A7E-422F-B2E1-6AF00DC944A6} failed due to the following error:
80040154 Class not registered (Exception from HRESULT: 0x80040154
(REGDB_E_CLASSNOTREG)).
At C:\temp\SSLIISBinding.ps1:13 char:1
+ New-WebBinding -name $iis_site_name -Protocol https -HostHeader
$iis_host_name ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~
+ CategoryInfo : InvalidArgument: (:) [New-WebBinding], Parameter
BindingException
+ FullyQualifiedErrorId : GetDynamicParametersException,Microsoft.IIs.Powe
rShell.Provider.NewWebBindingCommand

我用谷歌搜索过,有些人提到了 32 位和 64 位 powershell,但我尝试过使用所有可用的不同 powershell.exe。

任何人都遇到过这个问题,或者知道如何解决。

如果我们直接从命令行调用 .bat,它工作正常,就像通过 LetsEncrypt.exe 调用的一部分一样。权限问题? powershell.exe 错误?

最佳答案

你的那部分问题:

I've googled, some mentioning something about 32bit vs 64bit powershell

已经是答案的一半了。如果 PowerShell 进程的位数与操作系统的位数不匹配,某些命令将无法正常运行。因此,您需要运行 powershell.exe,它位于此 %windir%\System32\WindowsPowerShell\v1.0\ 目录中。但是有一个小问题描述在this documentation topic :

In most cases, whenever a 32-bit application attempts to access %windir%\System32, the access is redirected to %windir%\SysWOW64.

因此,如果 64 位操作系统上的 32 位程序调用 %windir%\System32\WindowsPowerShell\v1.0\powershell.exe,它实际上会调用 32 位版本的 PowerShell这里 %windir%\SysWOW64\WindowsPowerShell\v1.0\ 而不是 64 位的。要从 32 位应用程序实际调用 64 位 PowerShell,您需要使用这个技巧:

32-bit applications can access the native system directory by substituting %windir%\Sysnative for %windir%\System32. WOW64 recognizes Sysnative as a special alias used to indicate that the file system should not redirect the access.

关于windows - 新 WebBinding : Cannot retrieve the dynamic parameters for the cmdlet,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40031846/

25 4 0