У меня есть скрипт, который извлекает данные из веб-API следующим образом:
$wc = New-Object System.Net.WebClient
$response = $wc.DownloadString("https://example.com")
$parser = New-Object Web.Script.Serialization.JavaScriptSerializer
$thing = $parser.DeserializeObject($response)
Я использую VS Code в качестве своей IDE для написания и использую встроенную консоль плагина PowerShell для тестирования скрипта. Когда я бегу туда, все идет хорошо. Когда я пытаюсь запустить скрипт (на том же компьютере) с помощью программы Windows PowerShell (запускается как администратор из меню «Пуск»), я получаю следующую ошибку:
PS C:\repo> .\script.ps1
New-Object : Cannot find type [Web.Script.Serialization.JavaScriptSerializer]: make sure the assembly containing thi
type is loaded.
At C:\repo\script.ps1:15 char:11
+ $parser = New-Object Web.Script.Serialization.JavaScriptSerializer
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidType: (:) [New-Object], PSArgumentException
+ FullyQualifiedErrorId : TypeNotFound,Microsoft.PowerShell.Commands.NewObjectCommand
Есть ли причина, по которой эту зависимость нельзя разрешить с обычного терминала powershell? VS Code настраивает другую среду, о которой я не знаю?
Я использую Powershell V3.0, и на моем компьютере установлен .NET V4.0.
EDIT
Вывод $PSVersionTable
одинаков для обеих сред:
Name Value
---- -----
PSVersion 3.0
WSManStackVersion 3.0
SerializationVersion 1.1.0.1
CLRVersion 4.0.30319.42000
BuildVersion 6.2.9200.16398
PSCompatibleVersions {1.0, 2.0, 3.0}
PSRemotingProtocolVersion 2.2
EDIT2
Добавление Add-Type -AssemblyName System.Web.Extensions
в начало скрипта, кажется, заставляет его работать с обычного терминала. Тем не менее, я все еще хотел бы знать, почему он может работать без этого в VS Code. Есть ли скрипт инициализации, который запускается при загрузке плагина?