Powershell Core Script仅在pwsh命令中运行

时间:2019-10-15 19:52:04

标签: 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 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

1 个答案:

答案 0 :(得分:0)

好像Powershell会在您第一次实例化一个新的空WebRequestSession而不是在Invoke-WebRequest中对会话var进行参数化后创建一个空的WebRequestSession时抛出此错误。

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

$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?不确定解决此问题的最佳方法,但是我很确定这与您的模块无关。