【问题标题】:Powershell: How to get the location of a file, depending on its name?Powershell:如何根据文件名获取文件的位置?
【发布时间】:2020-07-14 10:33:02
【问题描述】:

所以我的任务是编写一个 PS 脚本,输出数据库文件的位置。文件的位置是:

C:\Program Files\Microsoft\Exchange Server\V15\Mailbox\Mailbox database Name\Mailbox database Name.edb 

我想我可以通过

获取我的 Exchange 数据库的名称
Get-MailboxDatabase | fl Name

有输出:

Mailbox Database 0161713049

这是数据库的名称,但实际名称前后有一堆看不见的字符。

所以我的问题是,我怎样才能摆脱这些隐形字符?我想连接一个字符串使其看起来像这样:

C:\Program Files\Microsoft\Exchange Server\V15\Mailbox\Mailbox Database 0161713049\Mailbox Database 0161713049.edb

我也需要此代码在具有完全不同数据库名称的服务器上工作,因此只需从开头删除不需要的字符 .Remove() 可能会有所帮助,但因为我不确定名称的长度数据库,我不能删除最后的字符。

我也无法摆脱这样一种感觉,即有一种更简单的方法可以获取我的 .edb 文件的位置。

【问题讨论】:

  • 如果您要进一步处理输出,则不应使用format-* 命令(fl 是format-list 的别名),因为它们应用了更改输出对象的特殊格式。相反,请使用Get-MailboxDatabase | Select -Expand Name。
  • 自 2013 年以来我就没有与 Exchange 合作过,但当时是 Get-MailBoxDatabase -Status |Select -Expand EDBFilePath

标签: string powershell location substring exchange-server


【解决方案1】:

Powershell 将几乎所有输出视为具有哈希表格式属性的对象,例如@{Name=MYEXCHDB}。当您只想要一个属性值作为字符串时,您必须像@AdminOfThings 建议的那样扩展它:

Get-MailboxDatabase | Select-Object -ExpandProperty Name

将名称连接成一个字符串:

$myString = "C:\path\to\$(Get-MailboxDatabase | Select-Object -ExpandProperty Name)"

正如@mathias-r-jessen 所建议的,数据库的路径是您可以直接获取的另一个属性:

Get-MailboxDatabase | Select-Object -ExpandProperty EdbFilePath | Select-Object -ExpandProperty PathName

【讨论】:

  • 您需要添加-Status参数才能返回EDBFilePath
  • 这就是我没有测试整个事情的结果,我使用的是Exchange2019并且不必添加-status,但EDBFilePath也是一个需要再次扩展的对象.更新答案
  • 有很多非常有用的想法。非常感谢!
猜你喜欢
  • 2022-01-14
  • 1970-01-01
  • 1970-01-01
  • 2011-04-09
  • 1970-01-01
  • 2012-08-04
  • 2016-11-30
  • 2010-11-03
相关资源
最近更新 更多