在文本文件中找到字符串后获取内容(从文件获取版本)

时间:2019-06-26 14:40:17

标签: powershell

我想获取位于另一个Powershell文件中的版本字符串。具体来说,我正在尝试获取字符串文件的第二部分:

$releaseVersion = "1.0.1.254"

我可以通过将Get-Content的返回值加载到变量中并使用.Contains()来查找字符串本身,但是我似乎无法在该行中获取其余字符。

  # === base === #
  $myVersion = Get-Content -Path 'C:\Temp\Start-NewDeviceSetup.ps1';
  $myVersion.Contains("$ReleaseVersion"); # returns true
  Select-String -InputObject $myVersion -Pattern '$releaseVersion' 
  # returns nothing

  # === other testing === #
  $a = Get-ChildItem -Path "C:\Temp\Start-NewDeviceSetup.ps1" | Select-String -Pattern '$releaseVersion'
  $a.Matches # also returns nothing
  $a.gettype(); # You cannot call a method on a null-valued expression

  # === other information === #
  $myVersion.GetType(); # System.Array
  $PSVersionTable.PSVersion # 5.1.17763.503

希望仅返回文件的版本(字符串)。 我将其存储在变量中,因为我也希望在脚本运行时将其显示,这样我可以更轻松地确定是否需要更新人员。

2 个答案:

答案 0 :(得分:0)

Get-Content将每一行存储到数组中的索引中。因此,您可以通过找到$ReleaseVersion所在的行来选择其位置,然后将索引放在$myVersion[]上。

  $myVersion = Get-Content -Path 'C:\Temp\Start-NewDeviceSetup.ps1';
  #You dont need this bool. $myVersion.Contains("$ReleaseVersion"); # returns true
  $myVersion = $myVersion[indexlocation of the value]
  $string = $myVersion -replace ""anything you may need to delete out", """

.Contains是一个布尔方法,它仅条件该语句是true还是false,因此不需要。它没有给您带来价值,因为它没有存储您正在寻找的实际价值。

答案 1 :(得分:-1)

如果要从Powershell文件读取值,则最好使用点源,然后再将内容读取为文本。在您当前脚本中点源Powershell文件后,您将可以访问所有变量,数组,哈希表等。

. "C:\Temp\Start-NewDeviceSetup.ps1"