【发布时间】: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