使用New-PSDrive映射IPC$隐藏共享时出现“指定驱动器根目录”错误
问题描述
执行以下PowerShell代码尝试映射远程机器的隐藏IPC共享:
$Username = "administrator" $Target = "\\target-win\ipc$" $Password = Read-Host -Prompt "Enter password:" -AsSecureString $Credential = New-Object System.Management.Automation.PSCredential($Username, $Password) cls New-PSDrive -Name "X" -Root $Target -PSProvider "FileSystem" -Credential $Credential "";"" Net Use
实际执行后,net use显示IPC共享已成功建立连接,但New-PSDrive抛出错误:
New-PSDrive : The specified drive root "\\target-win\ipc$" either does not exist, or it is not a folder. At line:10 char:1 + New-PSDrive -Name "X" -Root $Target -PSProvider "FileSystem" -Credent ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : ReadError: (X:PSDriveInfo) [New-PSDrive], IOException + FullyQualifiedErrorId : DriveRootError,Microsoft.PowerShell.Commands.NewPSDriveCommand
该问题仅在映射隐藏共享(含本地隐藏共享)时出现,普通非隐藏远程共享无异常,希望解决错误而非忽略它。
解决方案
- 核心原因:
IPC$是Windows的命名管道共享,用于进程间通信,并非文件系统目录。New-PSDrive的FileSystemProvider要求目标必须是可枚举的文件夹结构,因此会报错;而net use不做该校验,所以能成功建立连接。 - 针对性解决思路:
- 若仅需验证身份并建立IPC连接,无需映射驱动器号:直接使用
net use即可,或者改用PowerShell的SMBProvider(PowerShell 5.1及以上支持),它专门用于处理SMB共享,包括IPC这类特殊共享:$Username = "administrator" $Target = "\\target-win\ipc$" $Password = Read-Host -Prompt "Enter password:" -AsSecureString $Credential = New-Object System.Management.Automation.PSCredential($Username, $Password) # 用SMB Provider建立IPC连接,无需本地驱动器号 New-PSDrive -Name "IPC_Target" -Root $Target -PSProvider SMB -Credential $Credential net use - 若要映射普通文件类隐藏共享(如
C$),可以继续使用FileSystemProvider,因为这类共享本质是文件系统目录,符合Provider要求。 - 避免给IPC共享分配本地驱动器号:IPC共享不需要也不支持文件系统驱动器映射,它的作用是建立身份验证会话,后续访问其他共享时会自动复用这个会话。
- 若仅需验证身份并建立IPC连接,无需映射驱动器号:直接使用
内容的提问来源于stack exchange,提问作者sbagnato
相关产品推荐
相关产品推荐

