【问题标题】:Using new-item to create folder occasionally throws error in Powershell使用 new-item 创建文件夹偶尔会在 Powershell 中引发错误
【发布时间】:2019-09-30 14:02:33
【问题描述】:

我有一个安装了 Powershell 5.0 的 Windows 2016 服务器。我正在尝试使用下面的 Powershell 命令在网络文件共享(也在同一台服务器上,但我使用 \server\backup 而不是 D:\backup 访问文件共享)上创建一个文件夹。

但是,下面的代码偶尔会抛出错误。

System.ArgumentException: Invalid Path: '\\server\backup\PSBackup\newFolder'.
   at Microsoft.SqlServer.Management.PowerShell.SqlPath..ctor(String path)
   at Microsoft.SqlServer.Management.PowerShell.SqlServerProvider.NewItem(String path, String type, Object newItem)
   at System.Management.Automation.SessionStateInternal.NewItemPrivate(CmdletProvider providerInstance, String path, String type, Object content, CmdletProviderContext context)

我有一个按顺序创建文件夹的 powershell 脚本,相同的代码创建第一个文件夹,但在创建第二个文件夹时抛出错误。

您在网络共享上创建文件夹时遇到过这样的问题吗?顺便说一句,相同的 powershell 脚本在我的开发机器(Windows 2012 R2)和 Windows 2008 R2 服务器上运行没有任何问题。

$rootFolder = "\\server\backup\PSBackup"
$folderName = "newFolder"

$createdDirectory = New-Item -Path $rootFolder -ItemType "directory" -Name $folderName

【问题讨论】:

  • 当你喜欢$createdDirectory = New-Item -LiteralPath (Join-Path -Path $rootFolder -ChildPath $folderName) -ItemType Directory时会发生什么?
  • 路径是否有方括号? [ ]
  • @js2010 没有路径没有括号。
  • @Theo no LiteralPath 也不起作用。实际上,我上面的代码大部分时间都可以工作,但再次运行时会抛出错误。

标签: powershell


【解决方案1】:

Path 参数更改为 "Microsoft.PowerShell.Core\FileSystem::$($rootFolder)" 而不是 $rootFolder,代码按预期工作。

传递远程文件夹作为参数应该有问题。

$createdDirectory = New-Item -Path "Microsoft.PowerShell.Core\FileSystem::$($rootFolder)" -ItemType "directory" -Name $folderName

【讨论】:

  • 我使用 sqlserver PS 模块在创建有问题的文件夹之前备份我的数据库。由于此模块将 ptah 更改为 SQLSERVER:\ 文件夹创建会引发错误。我在 SQL Server 备份操作之前定义了 $rootFolder 变量。但是在 SQL Server 操作之后,此变量变为空。
  • 根本问题是我用来备份数据库的sqlserver模块导致路径改变。这会导致 $rootFolder 变量丢失其值。我在使用 sqlserver 模块之前调用了 Push-Location 函数,然后在停止使用它之后调用了 Pop-Location 函数,然后继续。
猜你喜欢
  • 2017-12-11
  • 1970-01-01
  • 2018-09-13
  • 1970-01-01
  • 2022-11-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多