Я разрабатываю Powershell CmdLet в C # для стандартизации установок через SCCM в нашей компании. со вчерашнего дня (возможно, Windows Updates ??) я получаю сообщение об ошибке при вызове моего командлета в Powershell ise. раньше это работало таким образом несколько недель (??).
Update-Environment : the handle is invalid.
In C:\...\Install.ps1:56 Zeichen:5
+ Update-Environment
+ ~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [Update-Environment], IOException
+ FullyQualifiedErrorId : System.IO.IOException,InstallTools.CmdLets.UpdateEnvironment.UpdateEnvironment
Update-Environment является первым вызовом и устанавливает некоторые переменные среды, такие как Source, DateTime, параметры ведения журнала через NLog, ...
для тестирования моего решения я установил параметры DebugParameters в VisualStudio (2019 Professional):
- Внешняя программа: C: \ Windows \ System32 \ WindowsPowerShell \ v1.0 \ powershell.exe
- CommandlineArguments: -noexit -file "c: \ полный путь к \ Install.ps1" -Silent -Priority veryHIGH
Install.ps1 - это шаблон для упаковщиков (фрагментировано ):
[CmdletBinding()]
Param
(
[Parameter(Mandatory=$false, ValueFromPipeline=$true, ValueFromPipelineByPropertyName=$true)][switch]$Uninstall,
[Parameter(Mandatory=$false, ValueFromPipeline=$true, ValueFromPipelineByPropertyName=$true)][Int]$Restart,
[Parameter(Mandatory=$false, ValueFromPipeline=$true, ValueFromPipelineByPropertyName=$true)][string]$Priority = 'NORMAL',
[Parameter(Mandatory=$false, ValueFromPipeline=$true, ValueFromPipelineByPropertyName=$true)][switch]$Silent
)
PROCESS {
if(-not $PSScriptRoot) {
$PSScriptRoot = Split-Path $MyInvocation.MyCommand.Path -Parent
}
#region ---------------------- SET LOCAL VARIABLES HERE -------------------------------
[switch]$env:Silent = $Silent
[string]$env:Priority = $Priority
[string] $env:AppsToClose = "Firefox, Chrome, \Microsoft Office "
[string]$env:SourceFolder = "$PSScriptRoot\Source"
[string]$env:DisplayName = 'SAP GUI 1.3.4.675 with IXOS 10.5 and Business Explorer'
[string]$env:PackageAutor = 'Name'
#endregion
#region -------------- IMPORTING MODULES and Set Start Values ----------------------------
try {
Import-Module "C:\Users\TestUser\Desktop\InstallTools\__Projects\InstallTools\bin\Debug\InstallTools.dll" -Global -Force
} catch{return 1}
Update-Environment
CmdLet (вырезано):
namespace InstallTools.CmdLets.UpdateEnvironment
{
using System;
using System.Linq;
using System.Management.Automation;
using System.Text.RegularExpressions;
[Cmdlet(VerbsData.Update, "Environment")]
[OutputType(typeof(UpdateEnvironment))]
public partial class UpdateEnvironment : PSCmdlet
{
[Parameter(Mandatory = false, ValueFromPipeline = true, ValueFromPipelineByPropertyName = true)]
public SwitchParameter SetLapTime { get; set; }
[Parameter(Mandatory = false, ValueFromPipeline = true, ValueFromPipelineByPropertyName = true)]
public SwitchParameter GetLapTime { get; }
[Parameter(Mandatory = false, ValueFromPipeline = true, ValueFromPipelineByPropertyName = true)]
public SwitchParameter GetBegin { get; }
[Parameter(Mandatory = false, ValueFromPipeline = true, ValueFromPipelineByPropertyName = true)]
public SwitchParameter GetBeginForFile { get; set; }
[Parameter(Mandatory = false, ValueFromPipeline = true, ValueFromPipelineByPropertyName = true)]
public SwitchParameter CalcLapDuration { get; set; }
[Parameter(Mandatory = false, ValueFromPipeline = true, ValueFromPipelineByPropertyName = true)]
public SwitchParameter CalcTotalDuration { get; set; }
#endregion
protected override void ProcessRecord()
{
base.ProcessRecord();
}
}
}
Когда я запускаю через VisualStudio, все работает нормально. Но при запуске через PS1 я получаю ошибку.
Кто-нибудь знает, почему здесь что-то не так?
Спасибо за поддержку!
Крис