windows - Hvad sker der med disse PSDriveInfo objekter?

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg har et par scripts, der skaber flere forekomster af PSDrive til eksterne forekomster. Jeg vil gerne sikre, at hver forekomst af PSDrive oprettet er ryddet op.


Jeg har et Powershell-modul som følgende. Dette er en forenklet version af, hvad jeg rent faktisk kører:


function Connect-PSDrive {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$true)]
        $Root,

        [String]
        $Name = [Guid]::NewGuid().ToString(),

        [ValidateSet("Registry","Alias","Environment","FileSystem","Function","Variable","Certificate","WSMan")]
        [String]
        $PSProvider = "FileSystem",

        [Switch]
        $Persist = $false,

        [System.Management.Automation.PSCredential]
        $Credential
    )

    $parameters = @{
        Root = $Root;
        Name = $Name;
        PSProvider = $PSProvider;
        Persist = $Persist;
    }

    $drive = $script:drives | Where-Object {
        ($\_.Name -eq $Name) -or ($\_.Root -eq $Root)
    }

    if (!$drive) {
        if ($Credential) {
            $parameters.Add("Credential", $Credential)
        }
        $script:drives += @(New-PSDrive @parameters)
        if (Get-PSDrive | Where-Object { $\_.Name -eq $Name }) {
            Write-Host "The drive '$Name' was created successfully."
        }
    }
}

function Disconnect-PSDrives {
    [CmdletBinding()]
    param ()

    $script:drives | Remove-PSDrive -Force
}


Hver gang jeg påberåber funktionen Connect-PSDrive, kan jeg se, at et nyt drev er oprettet, og der tilføjes en reference til $script:drives. I slutningen af ​​det kaldende script har jeg en finally blok, der påberåber Disconnect-PSDrives, og det fejler med følgende undtagelse.


Remove-PSDrive : Cannot find drive. A drive with the name 'mydrive' does not exist.
At C:gitops
elease-scriptsPSModulesPSDriveWrapperPSDriveWrapper.psm1:132 char:22
+     $script:drives | Remove-PSDrive -Force
+                      ~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : ObjectNotFound: (mydrive:String) [Remove-PSDrive], DriveNotFoundException
    + FullyQualifiedErrorId : DriveNotFound,Microsoft.PowerShell.Commands.RemovePSDriveCommand


Jeg vil gerne vide, hvorfor henvisninger til de PSDrive objekter jeg oprettede er tilgængelige i $script:drives, og alligevel Remove-PSDrive ikke finder objekterne.


Jeg vil også gerne vide, hvordan jeg kan håndtere disse PSDrive tilfælde uden at skulle returnere hver forekomst til det kaldende script sådan at Disconnect-PSDrives virker.


Et par ekstra noter:



  • Jeg skaber disse drev med flag Persist som falsk.

  • Kørsel af disse flere gange fejl med for mange flere forbindelser til en maskine. Det er derfor, jeg tror, ​​at forbindelser ikke bliver ryddet op. Hvis min antagelse er forkert, bedes du venligst forklare, hvorfor forbindelser er ryddet op.


Bedste reference