Powershell Core Script 仅在 pwsh 命令中运行



我开发了一个模块"XPTO.psm1",我创建了我的自定义类:

class XPTO {
[string]$baseurl
[string]$fileToken
$session = [Microsoft.PowerShell.Commands.WebRequestSession]::new()

在我的主脚本 SCRIPT.ps1 中,我使用:

#! /usr/bin/pwsh
Using module '/root/scripts/XPTO.psm1'

然后,当我运行命令"pwsh"并调用脚本时,一切正常:

[root@XXXXXXXX scripts]# pwsh
PowerShell 6.2.3
Copyright (c) Microsoft Corporation. All rights reserved.
https://aka.ms/pscore6-docs
Type 'help' to get help.
PS /root/scripts> ./SCRIPT.ps1
True                                                                                
Collecting metrics                                                                  
10/15/19 4:41:57 PM  - Starting collecting metrics from  762 applications               
10/15/19 4:41:57 PM  - Started Multithread

但是如果我在 pwsh 之外运行它不起作用,我会收到此错误:

[root@XXXXXXXXX scripts]# pwsh ./SCRIPT.ps1
At /root/scripts/XPTO.psm1:198 char:17
+ ...   $session = [Microsoft.PowerShell.Commands.WebRequestSession]::new()
+                   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Unable to find type [Microsoft.PowerShell.Commands.WebRequestSession].
+ CategoryInfo          : InvalidOperation:     (/root/scripts/scripu2026ts/XPTO.psm1:String) [], ParentContainsErrorRecordException
+ FullyQualifiedErrorId : TypeNotFound

似乎Powershell会在您第一次实例化新的空WebRequestSession时引发此错误,而不是由于在Invoke-WebRequest中参数化会话变量而创建一个。

我创建了一个名为session.ps1的 2 行脚本来测试:

$session = [Microsoft.PowerShell.Commands.WebRequestSession]::new()
Write-Host $session.UserAgent

当我第一次运行它时,它给了我同样的错误。但是,我所做的只是再次运行它,并且不会发生错误。

C:UsersnickDesktop>pwsh session.ps1
Unable to find type [Microsoft.PowerShell.Commands.WebRequestSession].
At C:UsersnickDesktopsession.ps1:1 char:12
+ $session = [Microsoft.PowerShell.Commands.WebRequestSession]::new()
+            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo          : InvalidOperation: (Microsoft.Power...bRequestSession:TypeName) [], RuntimeException
+ FullyQualifiedErrorId : TypeNotFound
C:UsersnickDesktop>pwsh session.ps1
Mozilla/5.0 (Windows NT 10.0; Microsoft Windows 10.0.16299; en-US) PowerShell/6.1.3

因此,看起来您可能正在以非预期的方式创建新的WebRequestSession?不确定解决此问题的最佳方法,但我很确定它与您的模块无关。

最新更新