mpr/WNetCancelConnection2.ps1
function WNetCancelConnection2 { <# .SYNOPSIS Destroys a connection created by WNetAddConnection2W. .DESCRIPTION This function uses WNetCancelConnection2 to destroy a connection created by WNetAddConnection2W. If a -Path isn't specified, a -ComputerName is required to 'unmount' \\$ComputerName\IPC$. .PARAMETER ComputerName Specifies the system to remove a \\ComputerName\IPC$ connection for. .PARAMETER Path Specifies the remote \\UNC\path to remove the connection for. .NOTES Author: Will Schroeder (@harmj0y) License: BSD 3-Clause Required Dependencies: PSReflect Optional Dependencies: None (func Mpr WNetCancelConnection2 ([Int]) @( [String], # _In_ LPCTSTR lpName, [Int], # _In_ DWORD dwFlags [Bool] # _In_ BOOL fForce ) -EntryPoint WNetCancelConnection2) .LINK https://msdn.microsoft.com/en-us/library/windows/desktop/aa385427(v=vs.85).aspx .EXAMPLE #> [Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSUseShouldProcessForStateChangingFunctions', '')] [CmdletBinding(DefaultParameterSetName = 'ComputerName')] Param( [Parameter(Position = 0, Mandatory = $True, ParameterSetName = 'ComputerName', ValueFromPipeline = $True, ValueFromPipelineByPropertyName = $True)] [Alias('HostName', 'dnshostname', 'name')] [ValidateNotNullOrEmpty()] [String[]] $ComputerName, [Parameter(Position = 0, ParameterSetName = 'Path', Mandatory = $True)] [ValidatePattern('\\\\.*\\.*')] [String[]] $Path ) PROCESS { $Paths = @() if ($PSBoundParameters['ComputerName']) { ForEach ($TargetComputerName in $ComputerName) { $TargetComputerName = $TargetComputerName.Trim('\') $Paths += ,"\\$TargetComputerName\IPC$" } } else { $Paths += ,$Path } ForEach ($TargetPath in $Paths) { Write-Verbose "[WNetCancelConnection2] Attempting to unmount: $TargetPath" $Result = $Mpr::WNetCancelConnection2($TargetPath, 0, $True) if ($Result -eq 0) { Write-Verbose "[WNetCancelConnection2] '$TargetPath' successfully ummounted" } else { Throw "[WNetCancelConnection2] error unmounting $TargetPath : $(([ComponentModel.Win32Exception]$Result).Message)" } } } } |