我正在编写一个遍历目录的递归函数,并复制其中的每个文件和文件夹.我在函数中的第一个检查是查看传入的路径是否有子节点.为了找到这个,我使用以下方法:
[array]$arrExclude = @("Extras")
Function USBCopy
{
Param ([string]$strPath, [string]$strDestinationPath)
try
{
$pathChildren = Get-ChildItem -Path $strPath
if($pathChildren.Length -gt 0)
{
foreach($child in $pathChildren)
{
if($arrExclude -notcontains $child)
{
$strPathChild = "$strPath\$child"
$strDestinationPathChild = "$strDestinationPath\$child"
Copy-Item $strPathChild -Destination $strDestinationPathChild
USBCopy $strPathChild $strDestinationPathChild
}
}
}
}
catch
{
Write-Error ("Error running USBCopy: " + $Error[0].Exception.Message)
}
}
Run Code Online (Sandbox Code Playgroud)
在大多数情况下,我的函数可以工作,但我的代码会说当一个目录实际上有一个文件时它是空的.当我调试我的函数时,变量会说该文件夹有子项但变量的长度为0.任何人都知道如何解决这个问题?
我是Jenkins的新手,但真的很想看看Jenkins如何在构建流程中为我提供帮助。作为要求的一部分,我们需要能够通过x64实例调用PowerShell脚本。我已经在Windows Server 2012 R2上安装了Jenkins,开箱即用,PowerShell插件运行良好,但可以通过x86引擎运行。据我了解,默认情况下,Jenkins使用Java的x86版本。没问题。我已经安装了x64版本的Java,并修改了Jenkins.xml使其看起来像这样:
<executable>C:\Program Files\Java\jre1.8.0_131\bin\java.exe</executable>
Run Code Online (Sandbox Code Playgroud)
…并重新启动了詹金斯服务。该服务可以正常重启,但Web界面无响应。我试图重新引导整个服务器,将JAVA_HOME系统环境变量设置为,C:\Program Files\Java\jre1.8.0_131并卸载了Java的x86版本,但无济于事。
从我一直在阅读的内容来看,这对大多数人有效,但对我而言无效。我还查看了jenkins.err.log和jenkins.out.log文件,以查看为什么我没有从Web界面得到任何响应并且它们什么也没有的任何迹象。
我想在文件functions.ps1中定义函数,然后从另一个脚本调用它.像这样的东西:
Functions.ps1:
Function Hi()
{
"hi"
}
Run Code Online (Sandbox Code Playgroud)
从另一个脚本(Call.ps1)调用它.
Call.ps1:
invoke-expression -Command .\functions.ps1
Hi
Run Code Online (Sandbox Code Playgroud)
但是函数是在脚本函数的本地范围内定义的.我得到的错误:
The term 'hi' is not recognized as the name of a cmdlet, function,
script file , or operable program. Check the spelling of the name, or
if a path was included, v erify that the path is correct and try
again.
Run Code Online (Sandbox Code Playgroud)
有没有一种简单的方法来解决这个问题?
我在使用PowerShell创建/填充csv文件时遇到了一些麻烦.我是powershell的新手,所以我可能会遗漏一些明显的东西,所以请放轻松我.情况如下:
首先,我创建一个数组(?)作为我的表
#Create output table with headers
$output = @()
$row = New-Object System.Object
$row | Add-Member -MemberType NoteProperty -Name "Example Header 1" -Value $null
$row | Add-Member -MemberType NoteProperty -Name "Example Header 2" -Value $null
$row | Add-Member -MemberType NoteProperty -Name "Example Header 3" -Value $null
$output += $row
Run Code Online (Sandbox Code Playgroud)
我正在使用它将其写入文件
$output | Export-Csv new.csv -NoTypeInformation
这似乎是一个带有我想要的标题的csv文件.如果有更好的方法,请告诉我.下一步是我遇到问题的地方.我现在需要以编程方式用数据填充表.导入现有的csv文件时,我能够像数组一样访问/修改表中的数据(即$output[rowIndex]."Header Name" = "new data").
所以我尝试将数据添加到我新创建的表中.我写道$ouput[0]."Example Header 1" = "Test Data".这符合我的预期,并使用"测试数据"填充指定标题的列中的第一行.但是,我只能访问[0].$output[1]等等导致错误,因为我猜它们不存在.我$output += $row再次尝试使用添加更多行,但它根本不起作用并导致一些奇怪的错误发生(如果我写入一行,它会写入所有行,可能是因为它的所有相同的对象).
所以基本上我的问题是,如何从头开始创建一个csv文件,为它添加一些标题,然后开始写入所有(未知/可变数量的)行?我确信有更好的方法可以做到,但就像我说的那样,我对powershell很新.理想情况下,我希望能够通过索引(0,1,2等)访问行,但我对任何事情都持开放态度. …
我是Powershell的新手,但我用Java和其他语言编程.
我试图将一个字符串传递给一个函数,然后让该函数返回该字符串.下面是我尝试运行的简单代码:
#funcpass.ps1
function test {
Param([string]$input)
$out = $input
return $out
}
$a = test hello world
Write-Host $a
Run Code Online (Sandbox Code Playgroud)
我希望这会传递字符串,hello world然后将字符串返回$a到要打印的变量中.相反,我的控制台返回:
PS P:\test> .\funcpass.ps1
PS P:\test>
Run Code Online (Sandbox Code Playgroud)
我遇到了某种范围错误吗?任何帮助将不胜感激.我不确定版本号是否有帮助,但这里是:
PS P:\test> $PSVersionTable.PSVersion
Major Minor Build Revision
----- ----- ----- --------
5 1 14393 1198
Run Code Online (Sandbox Code Playgroud) 今天(2017-05-29)我在Windows 7 Enterprise上使用PowerShell 5.0.10586.117并运行以下(缩短版):
$dateOfLicense = "2017-04-20"
$dateOfToday = '{0:yyyy-MM-dd}' -f (Get-Date)
$TimeDifference = [DateTime]$dateOfToday - [DateTime]$dateOfLicense
if (($TimeDifference) = 14)
{
Write-Host "test"
}
Run Code Online (Sandbox Code Playgroud)
即使两天之间的差异是39,我的代码跳转到if子句并将"test"发送到屏幕.
我在这做错了什么?
所以我有一个ANDing IPv4地址和子网地址的脚本.不检查它是否是有效输入(我应该添加),它将输入转换为二进制.
if ($readInput -match "y"){
$readIP = read-host "Please input an IPv4 address to be ANDed "
# need to add subnet mask later.
$readSub = read-host "Please input the Subnet Mask "
#need to delimite '.'
#$readIP.split "."
#$readSub.split "."
#need to join them
#convert IPv4 address to binary, period seperated at each octet. (input ip, base 2)
$binIP = [convert]::ToString($readIP,2)
write-host "$binIP" -backgroundcolor "white" -foregroundcolor "black"
## need to have two 32 element array that compares each …Run Code Online (Sandbox Code Playgroud) 我为实习编写了一个简单的脚本,它通过提供的目录进行拖拽并删除任何超过指定天数的文件.我今天花了我所有的空闲时间试图收紧它.这是我到目前为止所得到的:
function delOld($dir, $numDays){
$timespan = new-timespan -days $numDays
$curTime = get-date
get-childItem $dir -Recurse -file |
where-object {(($curTime)-($_.LastWriteTime)) -gt $timespan} |
remove-Item -whatif
}
Run Code Online (Sandbox Code Playgroud)
以下是函数调用的示例:
delOld -dir "C:\Users\me\Desktop\psproject" -numDays 5
Run Code Online (Sandbox Code Playgroud)
对于阅读的难度感到抱歉,我发现将操作压缩到一行比在每次迭代中将它们重新分配给清晰变量更有效.出于测试目的,此时删除项目已被删除.我知道在这一点上,我可能无法加快速度,但是,我在TB文件上运行它,所以每个操作都很重要.
提前感谢您提供的任何建议!
我们已经有了Move-AzureRmDataLakeStoreItem在Azure datalake中的文件夹之间移动文件.我想要的是复制数据池中的文件而不影响原始文件.
我知道的可能性是 -
USQL到EXTRACT从的资源文件,然后数据OUTPUT到destinationfile -但我试图复制的所有排序文件(.广州,txt文件,.INFO,名为.exe,.msi)的,我不知道是否USQL能帮助我以.gz或.exe或.msi文件Data Factory将数据从/到复制Data Lake store所以,我在这里问的是,我们还可以使用其他任何东西来管理Azure Data Lake Store中的文件副本吗?
function showMenu {
cls;
write-host “my menu”;
write-host “1... Programm1”;
write-host “2... Programm1”;
write-host “3... Programm1”;
write-host “q...exit”;
return read-host "it´s your choice"
}
$x = showMenu
do {showMenu}
until ($x -eq ‘q’)
Run Code Online (Sandbox Code Playgroud)
根据我对返回读取主机的理解"这是你的选择"我返回一个可能的变量,然后我将其定义为$ x,该脚本在第一次执行时工作,但是在输入了除"q"以外的其他内容之后,它只是没有离开循环
我已经谷歌搜索了一下,但只找到了关于使用无限循环的人的东西,我的书没有返回任何我可以使用的东西.
tl; dr:我有一个循环,它首先退出但不是在进一步的循环之后.