小编gms*_*man的帖子

删除powershell中的前导零

我有几个字符串,并尝试删除它们的前导零.我知道我可以使用TrimStart()但如果所有数字都为零则错了.

$Test = "00000.22"
$Test = $Test.trimstart('0')
Run Code Online (Sandbox Code Playgroud)

结果是.22,我期望的是0.22.我怎样才能实现它?谢谢.

powershell trim

6
推荐指数
2
解决办法
3136
查看次数

使用带有equals和period的single-hypen参数执行外部命令

我有一个接受这样的参数的工具(例如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"'
  • PowerShell V3 +: foo.exe --% -name="john.doe"
  • $nameArg = "john.doe"; foo.exe -name="$nameArg"

但是,其中一些选项会阻止变量插值.还有其他方法可以阻止PowerShell导致语法问题吗?在这个特定的实例中(添加句点),为什么PowerShell有解释这个问题?

powershell powershell-2.0

6
推荐指数
1
解决办法
65
查看次数

如何将今天的日期作为 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)

parameters powershell

5
推荐指数
1
解决办法
3201
查看次数

在 Powershell 中选择 CSV 列,其中标题名称包含特定字符串

我有一个大约 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)

csv powershell

5
推荐指数
1
解决办法
8572
查看次数

更改“/var/lib/mysql/”的所有权:权限被拒绝

环境?
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)

mysql docker docker-for-windows

5
推荐指数
1
解决办法
8894
查看次数

Powershell获取Windows中显示的区分大小写的路径

我正在寻找一种方法来获取本地路径,其中包括名称中使用的任何驼峰式大小写。主要原因是我可以使用相同的路径在 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 操作系统中显示的路径?我不能只调用我需要的文件的完整路径,因为我不能保证它从根目录开始。我也不想在查找过程中浪费时间。

windows powershell windows-subsystem-for-linux

5
推荐指数
1
解决办法
2777
查看次数

Powershell Set-MpPreference -DisableRealtimeMonitoring $ true无法正常工作

我必须警告您,我不太会使用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

有什么想法吗?

security powershell cmd windows-defender

3
推荐指数
1
解决办法
7947
查看次数

在 VLOOKUP 中使用表格和列标题

我很难将我的VLOOKUP语句从简单地引用工作表和范围(这就像一个魅力)转变为使用表名和列名。

我正在尝试使它VLOOKUP更加健壮,因为它从中提取的工作表将不断更改数据,因此列号会经常更改。因此,我只想通过名称引用列。

  1. 我已将源数据表转换为表格。
  2. 我已经适当地命名了所有列并仔细检查了拼写。

这个 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)

通常我会自己继续尝试这个……但我感到不知所措并且已经尝试了几个小时。任何建议都会很棒。

谢谢!!

excel excel-formula vlookup

2
推荐指数
1
解决办法
7260
查看次数

Powershell - Excel 将列的格式更改为文本

我必须每天转换 20 个 excel 文件(相同格式)中的 2 列。有没有办法在powershell中使它工作。我搜索了一些示例,但都指向数字格式的更改。

当前代码:

$worksheet.columns.item('d').NumberFormat = "$#,##0.00" 
Run Code Online (Sandbox Code Playgroud)

整个工作簿/工作表采用“常规”格式

帮助表示赞赏。

excel powershell

2
推荐指数
1
解决办法
9031
查看次数

如果Powershell中的/ Else没有按预期运行?

有人可以向我解释为什么下面没有按预期工作?在下面的例子中,我希望$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处理不正确...

powershell

2
推荐指数
2
解决办法
80
查看次数

是否可以使用 Write-Error 或仅使用 throw 指定错误类型?

我正在构建一个脚本,该脚本将包含一个包含块和多个块的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)

error-handling powershell try-catch powershell-5.0

1
推荐指数
1
解决办法
533
查看次数

在新列中将文件名附加到 CSV

我有很多 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)

有人可以帮我弄这个吗?

csv powershell

1
推荐指数
1
解决办法
5100
查看次数

Powershell - 导入本地 CSV

我有一个 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?

谢谢!

csv powershell powershell-3.0 powershell-4.0 powershell-5.0

0
推荐指数
1
解决办法
2515
查看次数