【问题标题】:text manipulation with powershell使用 powershell 进行文本操作
【发布时间】:2019-04-23 08:32:45
【问题描述】:

我正在尝试格式化此命令的输出,以便仅获取 dfsnamespace:

\\F-TYPHON\DATA13\AI-Project

我不能使用Get-DfsnFolderTarget cmdlet,因为RSAT-DFS-Mgmt-Con 没有安装在所有服务器上,我无法安装它。

$DFSPath="\\F-TYPHON\shared\AI-Project"

PS C:\> dfsutil client property state $DFSPath

Active, Online      \\F-TYPHON\DATA13\AI-Project

Done processing this command.

我试过了。

PS C:\> $dfs=dfsutil client property state $DFSPath

PS C:\> $dfs.trimstart("Active, Online")

方法调用失败,因为 [System.Object[]] 不包含名为“trimstart”的方法。 在行:1 字符:15 + $dfs.trimstart

任何帮助将不胜感激 我可以列出文件管理器的所有卷数据,但结构中存在许多不连贯性,因此我只需在文件管理器的“共享”下列出共享文件夹,然后使用 dfsutil 处理它以获得绝对值路径

【问题讨论】:

  • 尝试执行$dfs.GetType()$dfs | Select-Object -Property * 以便您可以看到 $Var ... 中的内容,然后选择要使用的正确道具。 [grin] 我怀疑您正在查看一个字符串数组而不是一个长的多行字符串。
  • PS C:\> $dfs.GetType() IsPublic IsSerial Name BaseType -------- -------- ---- -------- - True True Object[] System.Array 这里是第一个的输出
  • PS C:\> $dfs | Select-Object -Property * Length ------ 0 29 47
  • 所以它是一个字符串数组,而不是一个字符串。 [grin] 看看Select-String 的处理方法。

标签: powershell microsoft-distributed-file-system netapp


【解决方案1】:

使用正则表达式匹配dfsutil的文本输出:

$DFSPath="\\F-TYPHON\shared\AI-Project"

if ((dfsutil client property state $DFSPath) -match "(?<=\s{2,})\\\\.*"){
   $DFSNameSpace = $Matches.Value
}
  • 此处(?&lt;=\s{2,})\\\\.* 匹配lookbehind 中的两个或多个空格\s
    后跟两个(转义的)反斜杠和该行的其余部分。

【讨论】:

    【解决方案2】:

    感谢您的帮助 我找到了一个解决方案,我可以使用它不是 100% powershell,但我可以使用它以我可以在循环中使用它的格式提取输出,而不是使用 powershell 制作自动 robocopylines

    这里是我找到的输出代码

    $DFSPath="\F-TYPHON\shared\AI-Project"

    $dfspath=(dfsutil 客户端属性状态 $DFSPath |findstr /i \F-TYPHON)|out-string

    $dfs=$dfspath.Trimstart("活动,在线")

    写主机 $dfs 输出是

    \F-台风\DATA13\AI-项目

    这当然不是最好的,但我可以使用它

    如果您有其他建议,欢迎您

    【讨论】:

      猜你喜欢
      • 2019-08-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多