我有一个CSV文件,我想替换A1,B1,C1中的标题.然后删除整个D1列.
三个标题名称看起来像
A1 = PM # B1 = AssignGroup C1 = Status
我想将它们重命名为
A1 = VStatus B1 = Solution_Date C1 = Ticket_Number
文件名是Owner.csv.
我大多只是想指向正确的方向,所以我可以自己把它拼凑起来.我有相当数量的批处理文件脚本编制经验.我是PS菜鸟,但我认为PS对于下面的项目会更好.
我们有软件需要客户端ID作为安装字符串的一部分(以及交换机,usr/pass,其他交换机,日志记录路径等).
我已经创建了一个批处理文件(实际上有数百个),我PSEXEC在远程计算机上执行这个文件,但它很有用,但维护起来却很糟糕.每个中唯一的变化是客户端ID.
我正在尝试做的是使用带有2列的CSV作为输入(所以我只需要维护CSV):机器名称(如图所示%hostname%)和客户端ID.我想创建一个%hostname%与第1列中相应行匹配的脚本,读取同一行第2列中的数据,然后能够将其作为安装字符串中的变量调用.
EG如果我的CSV bobs-pc在第1列第6行中,则在以下安装字符串中插入第2行第6行(我们称之为0006)中的数据:
install.exe /client_ID=0006
Run Code Online (Sandbox Code Playgroud)
没有循环 由于我们运行的多个时区,我不希望它同时安装在所有机器上.
这样的事情对于我所拥有的许多项目都非常有用,所以我对学习更感兴趣,而不是让任何人为我编写.
我明白我应该用Import-Csv.我已经创建了一个示例csv,可以在PS中打印出某些字段.我需要的是脚本能够将这些字段作为变量插入安装字符串中.
我编写了一个调用New-Service cmdlet来创建Windows服务的脚本:
New-Service -Name $Name -BinaryPathName $ExecutablePath `
-Credential $Credential -DisplayName $DisplayName `
-Description $Description -StartupType $StartupType
Run Code Online (Sandbox Code Playgroud)
我的描述有问题.如果$ Description是一个空字符串或$ null我得到一个错误:
Cannot validate argument on parameter 'Description'.
The argument is null or empty. Provide an argument that is not null or empty,
and then try the command again.
Run Code Online (Sandbox Code Playgroud)
如果我完全省略-Description参数,那么命令运行时没有错误:
New-Service -Name $Name -BinaryPathName $ExecutablePath `
-Credential $Credential -DisplayName $DisplayName `
-StartupType $StartupType
Run Code Online (Sandbox Code Playgroud)
我可以通过以下方法解决此问题:
if ($Description)
{
New-Service -Name $Name -BinaryPathName $ExecutablePath `
-Credential $Credential -DisplayName $DisplayName `
-Description $Description -StartupType $StartupType …Run Code Online (Sandbox Code Playgroud) 我可以通过以下方式轻松获取PowerShell中的Mac地址:
$localMac=Get-WmiObject win32_networkadapterconfiguration | select macaddress
echo $localMac[0]
Run Code Online (Sandbox Code Playgroud)
结果是:
macaddress
----------
E8:21:32:E5:F4:6A
Run Code Online (Sandbox Code Playgroud)
如何在PowerShell中将结果更改为十进制格式?仅举例如7436378647
我试过了
$MacAddressConverted = $localMac[0] -replace '(:|-|\.)'
echo $MacAddressConverted
Run Code Online (Sandbox Code Playgroud)
它回来了
@{macaddress=E82132E5F46A}
Run Code Online (Sandbox Code Playgroud)
它接近我希望得到的但它仍然有@ {macadress =并且它没有转换为十进制
我正试图在Windows上启动我在Linux上编写的node.js模块.
我已经将env路径设置为nodejs,我已经安装了我的依赖项,当我单独使用npm时它正在工作.但是,当我开始我的模块时,它告诉我这个:
这是我的package.json的脚本:
有人可以向我解释什么是错的吗?
提前致谢.
我有一个包含文件列表的文件夹"D:\ PROD\transfert".
我想编写一个Powershell脚本,列出文件并让用户选择一个,然后脚本将对所选文件执行操作.理想我希望所选文件的路径存储在变量中.
这是想要的输出:
>Select a file :
[1] file1.zip
[2] file2.zip
[3] file3.zip
>
Run Code Online (Sandbox Code Playgroud)
我现在能做的就是列出没有数字的文件:
Get-ChildItem C:\PROD\transfert | % { $_.FullName }
Run Code Online (Sandbox Code Playgroud)
谢谢 !
我是PowerShell的新手,这似乎是一种合理的方法来替换我的DLL中的构建号(通过修改.rc文件)和我的SVN存储库中的版本号.
使用PowerShell ISE,我创建了以下变量:
$1 = "123"
$revision = "230"
Run Code Online (Sandbox Code Playgroud)
现在,我正在使用以下命令测试我的字符串替换,以查看它与我在线阅读的行为方式.我期待找到能让我回复文件版本的东西12,3,0,230:
$pattern = '(^\s*FILEVERSION\s*[0-9]+,[0-9]+,[0-9]+,)[0-9]+$'
' FILEVERSION 12,3,0,0' -replace $pattern, "`$1"
# returns " FILEVERSION 12,3,0,"
' FILEVERSION 12,3,0,0' -replace $pattern, "$1"
# returns "123"
' FILEVERSION 12,3,0,0' -replace $pattern, '$1'
# returns " FILEVERSION 12,3,0,"
' FILEVERSION 12,3,0,0' -replace $pattern, "`$1$revision"
# returns "$1230"
' FILEVERSION 12,3,0,0' -replace $pattern, "`$1`$revision"
# returns " FILEVERSION 12,3,0,$revision"
' FILEVERSION 12,3,0,0' -replace $pattern, "$revision`$1"
# returns "230 FILEVERSION 12,3,0,"
Run Code Online (Sandbox Code Playgroud)
我对尝试4和6的结果感到惊讶.尝试4,为什么PowerShell不能替换$revision为"230"?还有尝试6,为什么它在以前会被正确替换 …
我正在寻找的是Powershell版本:shell中的时间条件循环
所以我可以这样:
if(Condition -eq True){
for(3000){ #I assume it will use milliseconds
COMMAND
}
}
Run Code Online (Sandbox Code Playgroud)
编辑:这不会连续运行,不像示例,它可以随时触发,当时间结束时,它应该退出循环并恢复正常的程序.
在此示例中,我使用中间的.CSV文件过滤了whoami.exe的输出。有没有一种方法可以实现,而无需使用写入磁盘的临时文件?
FUNCTION Get-MyADGroups() {
Push-Location
CD $PSHOME #I must be sure to have writing rights
whoami /groups /fo csv > result.csv
$cc = Import-Csv -Path .\result.csv
$cc | select -ExpandProperty 'GROUP NAME'
rm result.csv
Pop-Location
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试运行使用字母日期命名的文件,并相应地设置文件日期时间.我的代码运行正常,当我注意到这个问题时,我已经准备好考虑它了.我的代码应检测两个日期并生成错误,但事实并非如此.我已经提取了相关代码,并重新创建了问题:
$str = "test20001231 20170415.txt"
$match = ($str -match "(?<=\b|\D)20\d{6,6}(?=\b|\D)")
"$match"
"$($Matches.length)"
"$($Matches[0].ToString())"
Run Code Online (Sandbox Code Playgroud)
给出这个输出:
True
1
20001231
Run Code Online (Sandbox Code Playgroud)
我对正则表达式代码的理解是它应该匹配从20开始的8位数字的所有内容,无论它在字符串中的哪个位置,除非它跟随或在另一个数字之前.所以我期待$ Matches.length为2.
我已经在网上测试了许多地方的正则表达式代码,它符合我期望的两个日期:http ://regexstorm.net/tester?p =%28%3f%3c%3d%5cb%7c%5cD %2920%5cd%7b6%2c6%7d%28%3f%3d%5cb%7c%5cD%29&i = test20001231 + 20170415.txt http://www.phpliveregex.com/p/jLA
该问题适用于PS和PS ISE.我搜索了很多(我认为),并没有提出任何有用的信息.有什么建议?非常感谢,戴夫