【问题标题】:Extracting part of a host name with select-object使用 select-object 提取主机名的一部分
【发布时间】:2018-01-06 03:04:05
【问题描述】:

我有一个简单的 powershell 函数,我在其中提供日志类型和事件,它会扫描我们所有的 SQL 服务器。它可以工作,除了主机名返回为 hostname.domain.local。我希望它只返回主机名。我已经尝试过 machinename.split('.') 和 substring 并且它不起作用。我尝试将 select-object 放入一个单独的变量中,并打算将它与其余列连接起来,但运行时间太长。

这是我在更改函数之前正在测试的示例废代码以及注释掉的不起作用的部分。环顾四周,发现了很多关于命令的资源,但是当我尝试在我的脚本中使用它们时它们不起作用。

我不断收到的错误是找不到接受参数'的位置参数。 '。

$servers = Get-Content -literalpath   "C:\temp\sql_servers3.txt" 
#$server
#$result = 
ForEach($box in $servers) {Get-Eventlog -ComputerName $box -LogName 
application -After 1-4-2018 -Entrytype Error | Where {$_.source -notin 
'Perfnet','Perflib', 'ntfs', 'vss'}| select-object -property MachineName}  
#$result_Host_name = select-object -inputobject $result -property 
 'MachineName'
 #'TimeGenerated', 'MachineName'.Split('.')[1], 'EventID','message'}
 #| Where {$_.source -notin 'Perfnet','Perflib', 'ntfs', 'vss'} 0
 #return $result_Host_name

【问题讨论】:

  • 举一个例子,从你的文本文件中提取一行,以及你试图提取的计算机名称。
  • 文本文件只是我正在扫描的服务器的列表。我正在遍历它并为每个运行 get-eventlog 。默认没有给我我想要的列,所以我在最后添加了一个选择对象来输出包括 MachineName 在内的四列。那个输出为完整的 DNS 名称,如 hostname.domain.local,我只想要主机名部分。

标签: powershell powershell-2.0 powershell-3.0 powershell-4.0


【解决方案1】:

当您使用Select-Object 时,您正在寻找的是“Calculated Property”。

| Select-Object @{n='HostName';e={($_.MachineName -split '\.')[0]}}

【讨论】:

  • 这将整个列从结果集中取出。
  • @Alen 你是什么意思从结果集中取出整列?它应该只返回主机名。如果您想要所有其他属性,您可以添加*(或您想要逗号分隔的任何属性),例如| Select-Object *,@{n='HostName';e={($_.MachineName -split '\.')[0]}} 这将返回所有属性以及主机名
  • 抱歉,括号有误。看起来它正在工作,我现在正在使用您的代码以及我需要的其他三个列进行测试
猜你喜欢
  • 2010-11-24
  • 1970-01-01
  • 2018-05-31
  • 1970-01-01
  • 2022-01-05
  • 2013-06-14
  • 2010-10-23
  • 2013-08-07
  • 1970-01-01
相关资源
最近更新 更多