我是PowerShell的新手,因此可以自我学习。我的问题是,您是否可以在同一行上同时执行“写入主机”和“日志写入”操作?
我所拥有的是:
Write-Host "Node Id is $nodeProps["NodeID"]"
LogWrite "Node Id is $nodeProps["NodeID"]"
Run Code Online (Sandbox Code Playgroud)
但我想知道是否有一种方法可以做到:
Write-Host, LogWrite "Node Id is $nodeProps["NodeID"]"
Run Code Online (Sandbox Code Playgroud)
感谢您提供的所有帮助!
我有一个写主机行,我想在其中执行命令,因此输出将插入到写主机字符串的中间。
基本上我有一个 txt 文件,其中保存一组脚本的配置数据,其中一个配置是日期和时间的格式。例如,年份格式的配置为“YYYY”,并将其写入$Year。
所以我想做的是这样的:
Write-Host "The year is " Get-Date -Format $Year.ToLower()
Run Code Online (Sandbox Code Playgroud)
运行时我期望在屏幕上看到的是
The year is 2019
Run Code Online (Sandbox Code Playgroud)
现在我知道我可以用这个逻辑声明另一个变量,然后......
Write-Host "The year is $NewVariable"
Run Code Online (Sandbox Code Playgroud)
...但我希望不要创建另一个变量。这是我的票据的一个简单的例子,所以如果我这么做的话,我会创建很多变量。请注意,我使用 .ToLower() 来补偿用户在配置文本文件中的输入。
Write-Host似乎没有解析变量的属性,这很奇怪。
PS C:\Users\x> $v=@{item1="kkk";item2="aaa"}
PS C:\Users\x> $v.Keys|%{$v.Item($_)}
kkk
aaa
PS C:\Users\x> Write-Host "$v.Count elements"
System.Collections.Hashtable.Count elements
PS C:\Users\x> $v.Count
2
PS C:\Users\x> $v
Name Value
---- -----
item1 kkk
item2 aaa
Run Code Online (Sandbox Code Playgroud)
您会看到,它$v是一个哈希表,
$v.Count
Run Code Online (Sandbox Code Playgroud)
打印2。但是为什么
Write-Host "$v.Count"
Run Code Online (Sandbox Code Playgroud)
打印出来System.Collections.Hashtable.Count?这不是我所期望的。
我有这个脚本,它根据某些自助餐厅查找文件并使用 Write-Host 写入它们的路径。现在,我想通过管道传输所有这些文件路径,并对这些文件进行处理。
基本上第一个脚本是这样的:
FindFiles.ps1:
Write-Host "C:\SomeDir\file1.txt"
Write-Host "D:\OtherDir\file2.txt"
Run Code Online (Sandbox Code Playgroud)
现在我想做这样的事情:
FindFiles.ps1 | foreach { Copy-Item $_ c:\backup\ }
Run Code Online (Sandbox Code Playgroud)
但显然这是行不通的。(实际上我想做一些比复制文件夹更复杂的事情,但这是另一个问题:-))
我正在编写一个具有大量输出的脚本,并且可以使用多个计算机名称.输出通知计算机名称,然后是有关该特定计算机的大量信息.我希望在#上面和下面有一系列s,它在每个信息部分之前宣布计算机名称,但是想知道我是否可以将#s的数量与提供的计算机名称的长度相同(s ).例如:
######## COMPNAME ########
要么
############## LONGERCOMPNAME ##############
我宁愿不必为每种可能的情况都有一个if else,例如
if ($compname.length -eq "8") {
Write-Host "########"
Write-Host "$compname"
Write-Host "########"
} elseif ($compname -eq "9") {
Write-Host "#########"
Write-Host "$compname"
Write-Host "#########"
Run Code Online (Sandbox Code Playgroud)
等等.如果必须,我会,它只是那些左右的十个.或者我可以使用一定数量的#s,它们总是至少覆盖计算机名称的最大长度.