我有几个字符串,并尝试删除它们的前导零.我知道我可以使用TrimStart()但如果所有数字都为零则错了.
$Test = "00000.22"
$Test = $Test.trimstart('0')
Run Code Online (Sandbox Code Playgroud)
结果是.22,我期望的是0.22.我怎样才能实现它?谢谢.
我有一个接受这样的参数的工具(例如in test.ps1):
foo.exe -name="john"
Run Code Online (Sandbox Code Playgroud)
因此,每个参数都使用单个连字符-,名称,等于=,然后是参数的值来指定.
当我从PowerShell调用这个确切的表达式时,它会毫无问题地执行.但是,当其中一个值包含这样的句点时.:
foo.exe -name="john.doe"
Run Code Online (Sandbox Code Playgroud)
运行它会导致语法错误:
$ ./test.ps1字符串开始:在test.ps1:1 char:24 + foo.exe -name ="john.doe <<<<"缺少终结符:".在test.ps1:1 char: 25
+ foo.exe -name ="john.doe"<<<<
+ CategoryInfo:ParserError:(:String)[],ParseException
+ FullyQualifiedErrorId:TerminatorExpectedAtEndOfString
我可以阻止PowerShell解释这一点的一些方法是:
foo.exe "-name=`"john.doe`""foo.exe '-name="john.doe"'foo.exe --% -name="john.doe"$nameArg = "john.doe"; foo.exe -name="$nameArg"但是,其中一些选项会阻止变量插值.还有其他方法可以阻止PowerShell导致语法问题吗?在这个特定的实例中(添加句点),为什么PowerShell有解释这个问题?
我想创建一个脚本来帮助复制在某个时间范围内修改的文件。我想将该$EndDate参数保留为可选,在这种情况下,我希望脚本使用今天的日期作为默认值。
下面是脚本:
param (
[Parameter(Mandatory=$True)]
[string]$Path,
[Parameter(Mandatory=$True)]
[string]$targetDir,
[Parameter(Mandatory=$True)]
[string]$BeginDate,
[Parameter(Mandatory=$False)]
[string]$EndDate,
[switch]$force
)
Get-ChildItem -Path $Path -Recurse | Where-Object {$_.LastWriteTime -gt $BeginDate -and $_.LastWriteTime -lt $EndDate }| cp -Destination $targetDir -Force
Run Code Online (Sandbox Code Playgroud) 我有一个大约 10-15 列的数据文件,我想从中提取特定的列。有些列我知道确切的列标题,而其他列我只知道前两个字母将始终是“FC”。如何仅选择我知道列标题的列和以“FC”开头的列?从“FC”列开始,我尝试过这样的:
$myCSV = Import-CSV "mydata.txt" -Delimiter "`t"
$FCcols = $myCSV[0].psobject.Properties | foreach { $_.Name } | Where {$_ -match "FC"}
$myCSV | select $FCcols
Run Code Online (Sandbox Code Playgroud)
但我只是收到一个错误:
Select-Object : Cannot convert System.Management.Automation.PSObject to one of
the following types {System.String, System.Management.Automation.ScriptBlock}.
At line:3 char:16
+ $myCSV | select <<<< $FCcols
+ CategoryInfo : InvalidArgument: (:) [Select-Object], NotSupport
edException
+ FullyQualifiedErrorId : DictionaryKeyUnknownType,Microsoft.PowerShell.Co
mmands.SelectObjectCommand
Run Code Online (Sandbox Code Playgroud)
然后,如果我尝试:
$myCSV = Import-CSV "mydata.txt" -Delimiter "`t"
$FCcols = [System.Collections.ArrayList]@()
$myCSV[0].psobject.Properties | foreach { $_.Name } | Where …Run Code Online (Sandbox Code Playgroud) 环境?
docker for windows 10 version: Docker version 17.09.0-ce, build afdb6d4 docker
images: mysql/mysql-server latest docker has
setting shared Drive C:
我想运行一个 mysql 容器,所以我使用以下命令:
C:\WINDOWS\system32>docker run -d -p 3306:3306 -v "C:/Program Files/MySQL/Config":/etc/mysql/ -v "C:/Program Files/MySQL/Data/":/var/lib/mysql/ --name mysqlserver mysql/mysql-server
c2b45a6668746f0aa708b17f05a720ee6b4cff477eeaef714685293d1b60f44b
C:\WINDOWS\system32>docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c2b45a666874 mysql/mysql-server "/entrypoint.sh my..." 9 seconds ago Exited (1) 7 seconds ago mysqlserver
2de1dbd9880b redis "docker-entrypoint..." 4 days ago Exited (0) 4 days ago myredis
35c805969295 redis "docker-entrypoint..." 9 days …Run Code Online (Sandbox Code Playgroud) 我正在寻找一种方法来获取本地路径,其中包括名称中使用的任何驼峰式大小写。主要原因是我可以使用相同的路径在 Windows wsl 中进行调用。例如,在 Windows 中我可以将文件称为
c:\FoO\bar.txt
c:\Foo\Bar.txt
Run Code Online (Sandbox Code Playgroud)
Windows 会将其显示为c:\foo\bar.txt. 当我尝试使用 bash 输入 WSL 时,我需要知道实际路径,因为 Linux 区分大小写。
我尝试过使用
$PSScriptRoot
Split-path C:\FoO\Bar.txt
(get-Item c:\Foo\Bar.txt).FullName
Run Code Online (Sandbox Code Playgroud)
但他们只会提供调用脚本的路径。
如何获取 Windows 操作系统中显示的路径?我不能只调用我需要的文件的完整路径,因为我不能保证它从根目录开始。我也不想在查找过程中浪费时间。
我必须警告您,我不太会使用Powershell。我正在尝试通过Powershell关闭Windows Defender实时保护,我找到了该命令Set-MpPreference -DisableRealtimeMonitoring $true并以管理员权限对其进行了尝试,只是为了获得此权限
Set-MpPreference:操作失败,出现以下错误:0x800106ba。操作:Set-MpPreference。目标:DisableRealtimeMonitoring。在第1行上:char:1
+ Set-MpPreference -DisableRealtimeMonitoring $ true
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~
+ CategoryInfo:NotSpecified:(MSFT_MpPreference:ROOT \微软... FT_MpPreference)
[设置MpPreference] CimException
+ FullyQualifiedErrorId:HRESULT 0x800106ba,SET-MpPreference
有什么想法吗?
我很难将我的VLOOKUP语句从简单地引用工作表和范围(这就像一个魅力)转变为使用表名和列名。
我正在尝试使它VLOOKUP更加健壮,因为它从中提取的工作表将不断更改数据,因此列号会经常更改。因此,我只想通过名称引用列。
这个 VLOOKUP 效果很好(目前):
=VLOOKUP(E6,'Costs'!$A$2:$AE$84,19,FALSE)
Run Code Online (Sandbox Code Playgroud)
但是,我想做的是让它看起来像这样:
=VLOOKUP(E6,tblCosts[Order Number],tblCosts[June 2017], FALSE)
Run Code Online (Sandbox Code Playgroud)
我一直在摆弄也试图使用 MATCH ,但它也不起作用:
=VLOOKUP(E31,tblCosts[Order Number],MATCH(F4,tblCosts[June 2017],FALSE),FALSE)
Run Code Online (Sandbox Code Playgroud)
更新
这个公式现在有效,但它返回的是订单号……而不是当月的成本。
=VLOOKUP(E31,(tblCosts[Order Number]),(tblCosts[June 2017]),FALSE)
Run Code Online (Sandbox Code Playgroud)
通常我会自己继续尝试这个……但我感到不知所措并且已经尝试了几个小时。任何建议都会很棒。
谢谢!!
我必须每天转换 20 个 excel 文件(相同格式)中的 2 列。有没有办法在powershell中使它工作。我搜索了一些示例,但都指向数字格式的更改。
当前代码:
$worksheet.columns.item('d').NumberFormat = "$#,##0.00"
Run Code Online (Sandbox Code Playgroud)
整个工作簿/工作表采用“常规”格式
帮助表示赞赏。
有人可以向我解释为什么下面没有按预期工作?在下面的例子中,我希望$shortFQDN变量被设置为test.com,但我回来了www.test.com:
$fqdn = 'dev.www.test.com'
$d3 = $fqdn.Split('.')[-3] #www
$d2 = $fqdn.Split('.')[-2] #website
$d1 = $fqdn.Split('.')[-1] #com
#Check if this is a 2LD domain (.com.au, .co.uk, .co.jp, etc.)
if ($d1 -ne 'com' -or 'net' -or 'org' -or 'edu' -or 'gov' -or 'biz') {
$shortFQDN = -join ("$d3",'.',"$d2",'.',"$d1")
} else {
$shortFQDN = -join ("$d2",'.',"$d1")
}
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?似乎if/else处理不正确...
我正在构建一个脚本,该脚本将包含一个包含块和多个块的Try 语句。此页面提供了一个很好的指南,可帮助识别PowerShell 中的错误类型,以及如何在语句中处理它们。TryCatchcatch
我一直Write-Error用到现在。我认为其中一个可选参数 ( Categoryor CategoryTargetType) 可用于指定错误类型,然后是一个catch专门用于该类型的块。
不走运:该类型始终列为Microsoft.PowerShell.Commands.WriteErrorException.
throw正是我所追求的。
代码
[CmdletBinding()]param()
Function Do-Something {
[CmdletBinding()]param()
Write-Error "something happened" -Category InvalidData
}
try{
Write-host "running Do-Something..."
Do-Something -ErrorAction Stop
}catch [System.IO.InvalidDataException]{ # would like to catch write-error here
Write-Host "1 caught"
}catch [Microsoft.PowerShell.Commands.WriteErrorException]{ # it's caught here
Write-host "1 kind of caught"
}catch{
Write-Host "1 not caught properly: $($Error[0].exception.GetType().fullname)"
}
Function Do-SomethingElse …Run Code Online (Sandbox Code Playgroud) 我有很多 csv 文件存储在一个目录中。在每个csv文件中需要通过powershell添加名称作为列。
例子
文件位置: <SERVERNAME>\Export\FILENAME1.CSV
内容:
1232;Description;a1
1232;Description;a2
Run Code Online (Sandbox Code Playgroud)
结果必须是:
1232;Description;a1;FILENAME1.CSV
1232;Description;a2;FILENAME1.CSV
Run Code Online (Sandbox Code Playgroud)
有人可以帮我弄这个吗?
我有一个 powershell 脚本,可以使用以下命令导入 CSV 文件:
$empCsv = Import-Csv "addEmp.csv"
Run Code Online (Sandbox Code Playgroud)
我将 csv 与脚本放在同一目录中,但我得到了FileNotFoundException. 如果我使用带有 CSV 路径的命令,如下所示:
$empCsv = Import-Csv .\Desktop\createUser\addEmp.csv
Run Code Online (Sandbox Code Playgroud)
效果很好。
我希望能够将此脚本提供给某人使用,并让他们从任何位置运行该脚本,并能够导入.csv位于同一目录中的脚本。
为什么我的第一个命令找不到 csv?
谢谢!