仅在pwsh命令内运行的Powershell核心脚本

仅在pwsh命令内运行的Powershell核心脚本,powershell,powershell-core,invoke-webrequest,Powershell,Powershell Core,Invoke Webrequest,我开发了一个模块“XPTO.psm1”,我创建了我的自定义类: class XPTO { [string]$baseurl [string]$fileToken $session = [Microsoft.PowerShell.Commands.WebRequestSession]::new() 在我的主脚本script.ps1中,我使用: #! /usr/bin/pwsh Using modu

我开发了一个模块“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/scrip\u2026ts/XPTO.psm1:String) [], ParentContainsErrorRecordException
+ FullyQualifiedErrorId : TypeNotFound

似乎Powershell会在您第一次实例化新的空WebRequestSession时抛出此错误,而不是在Invoke WebRequest中参数化会话变量后创建一个空WebRequestSession

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

$session = [Microsoft.PowerShell.Commands.WebRequestSession]::new()
Write-Host $session.UserAgent
当我第一次运行它时,它会给我相同的错误。然而,我所做的就是再次运行它,并且错误不会发生

C:\Users\nick\Desktop>pwsh session.ps1
Unable to find type [Microsoft.PowerShell.Commands.WebRequestSession].
At C:\Users\nick\Desktop\session.ps1:1 char:12
+ $session = [Microsoft.PowerShell.Commands.WebRequestSession]::new()
+            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo          : InvalidOperation: (Microsoft.Power...bRequestSession:TypeName) [], RuntimeException
+ FullyQualifiedErrorId : TypeNotFound

C:\Users\nick\Desktop>pwsh session.ps1
Mozilla/5.0 (Windows NT 10.0; Microsoft Windows 10.0.16299; en-US) PowerShell/6.1.3

所以,似乎您正在以一种非预期的方式创建一个新的WebRequestSession?不确定解决这个问题的最佳方法,但我非常确定这与您的模块无关

对于ps5.1,有一个powershell.exe用于查找各种模块的
$env:PSModulePath
。你的路径中有模块吗?