我想检查FTP服务器上是否存在某个文件.我写了代码,Test-Path
但它不起作用.然后我编写代码来获取FTP服务器文件大小,但它也不起作用.
我的代码
function File-size()
{
Param ([int]$size)
if($size -gt 1TB) {[string]::Format("{0:0.00} TB ",$size /1TB)}
elseif($size -gt 1GB) {[string]::Format("{0:0.00} GB ",$size/1GB)}
elseif($size -gt 1MB) {[string]::Format("{0:0.00} MB ",$size/1MB)}
elseif($size -gt 1KB) {[string]::Format("{0:0.00} KB ",$size/1KB)}
elseif($size -gt 0) {[string]::Format("{0:0.00} B ",$size)}
else {""}
}
$urlDest = "ftp://ftpxyz.com/folder/ABCDEF.XML"
$sourcefilesize = Get-Content($urlDest)
$size = File-size($sourcefilesize.length)
Write-Host($size)
Run Code Online (Sandbox Code Playgroud)
此代码无效.
错误
获取内容:找不到驱动器.名为"ftp"的驱动器不存在.在C:\ documents\upload-file.ps1:67 char:19 + $ sourcefilesize = Get-Item($ urlDest)+ ~~~~~~~~~~ ~~~~~~~~~~~ + CategoryInfo:ObjectNotFound:(ftp:String)[Get-Content],DriveNotFoundException + FullyQualifiedErrorId:DriveNotFound,Microsoft.PowerShell.Commands.GetContentCommand
不知道如何解决这个错误?有什么方法可以检查一些存在到FTP服务器?任何关于此的线索都会有所帮助.
因此,我已经浏览了该站点和Web,感觉好像缺少了一些简单的东西。
我发现相关问题,但是没有一个问题scriptblock
与第3方应用程序(不是简单的Windows函数或应用程序)的远程调用相结合
我有以下字符串,可以将其复制到命令窗口中,并且可以正常运行
"C:\Program Files (x86)\Vizient\Vizient Secure Channel v2.1\VizientSC.exe" UID=me@musc.edu PWD=XXXXXXXXX HCOID=123456 PRODTYPE=PRO-UHCSECURECHANNEL-CDB PACKAGETYPE=OTH FOLDERPATH="\\da\db5\MyFiles\Viz\20180413"
Run Code Online (Sandbox Code Playgroud)
为了简化这一过程,我们假设我想每次使用REMOTE调用时都运行相同的String。
我已经写了许多不同的方法,但是使用却无济于事
Invoke-Command -ComputerName "edwsql" -ScriptBlock { .........
Run Code Online (Sandbox Code Playgroud)
我只想在远程计算机上使用cmd.exe运行指定的字符串。
在字符串中运行的EXE是第三方软件,我不想安装所有可能的位置。从已安装且安全的盒子运行远程要容易得多。
有人可以指出我正确的方向吗????请问 我是PowerShell的新手。我正在尝试淘汰一些旧的PERL,因为在这几天之间,支持客户网站上的支持的人很少。
考虑以下代码:
$Obj = @(
[PSCustomObject]@{
LimitNew = 5368709120
Usage = 6166915072
}
[PSCustomObject]@{
LimitNew = 10737418240
Usage = 5368709120
}
[PSCustomObject]@{
LimitNew = 107374182400
Usage = 86973087744
}
[PSCustomObject]@{
LimitNew = 107374182400
Usage = 97710505984
}
)
$CultInfo = New-Object System.Globalization.CultureInfo -ArgumentList 'en-us',$false
$CultInfo.NumberFormat.PercentDecimalDigits = 2
$Obj |select @{L='pct used';E={($_.Usage/$_.LimitNew).ToString('P', $CultInfo)}}
Run Code Online (Sandbox Code Playgroud)
它返回以下输出:
pct used
--------
114.87 %
50.00 %
81.00 %
91.00 %
Run Code Online (Sandbox Code Playgroud)
我真正想要的是以下输出:
pct used
--------
114.87 %
50 %
81 %
91 %
Run Code Online (Sandbox Code Playgroud)
在阅读文档时,我似乎找不到在其末尾省略尾随零的选项。该方法$CultInfo.NumberFormat.PercentDecimalDigits
指定要查看小数点分隔符后的位数,而不是忽略零的位数。
我尝试编写Windows PowerShell脚本。我需要从目录树中的所有文件中获取文件哈希。
这是我到目前为止所得到的:
Get-ChildItem -Path "c:\temp\path" -Recurse -Force -Attributes !Directory | % {Get-FileHash $_.Fullname} | Out-File "c:\temp\report_file.txt"
Run Code Online (Sandbox Code Playgroud)
文件c:\temp\report_file.txt
是这样的:
Algorithm Hash Path
--------- ---- ----
SHA256 E3B0C44298...E4649B934CA495991B7852B855 c:\temp\path\report1.txt
SHA256 7B989C1C95...6756624B3887E501DCC377DB23 c:\temp\path\report2.txt
SHA256 EA0155401C...A6D44F1DEBB95E401AEFF4F908 c:\temp\path\report3.txt
SHA256 06DAA0E452...32E3F3104EA4564EAB67CA6A0A c:\temp\path\report4.txt
**SHA256 9C7C9FEA96...45F460BA9015C8F0A5CA830B6B c:\temp\path\report5.txt**
Run Code Online (Sandbox Code Playgroud)
一切正常。
期望:
我每天多次运行此cmdlet。有时会在此目录树中删除并重新创建文件。而且...输出文件中文件的顺序是不相同的。在下面的示例中report5.txt
,报告文件中的文件必须在最后一行,但在第二行。我想这是因为选择了递归选项。我需要此递归选项。当我在没有子目录的目录上运行cmdlet时,结果始终是相等的。但是,在带有子目录的目录(目录树)上时-不。
Algorithm Hash Path
--------- ---- ----
SHA256 E3B0C44298...E4649B934CA495991B7852B855 c:\temp\path\report1.txt
**SHA256 9C7C9FEA96...45F460BA9015C8F0A5CA830B6B c:\temp\path\report5.txt**
SHA256 7B989C1C95...6756624B3887E501DCC377DB23 c:\temp\path\report2.txt
SHA256 EA0155401C...A6D44F1DEBB95E401AEFF4F908 c:\temp\path\report3.txt
SHA256 06DAA0E452...32E3F3104EA4564EAB67CA6A0A c:\temp\path\report4.txt
Run Code Online (Sandbox Code Playgroud)
这是一种解决方案,可以在将数据输出到报告文件之前,按列全路径对所有数据进行排序吗?
如何获取第四个文件夹名称并将其存储在变量中,同时循环存储在父文件夹中的文件.例如,如果路径是
C:\ParentFolder\Subfolder1\subfolder2\subfolder3\file.extension
C:\ParentFolder\Subfolder1\subfolder2\subfolder4\file.extension
C:\ParentFolder\Subfolder1\subfolder2\subfolder5\file.extension
Run Code Online (Sandbox Code Playgroud)
那么subfolder2名称应该存储在一个变量中.任何人都可以帮我这个吗?
get-childitem $DirectorNane -Recurse | Where-Object{!($_.PSIsContainer)} | % {
$filePath = $_.FullName
#Get file name
$fileName = Split-Path -Path $filePath -Leaf
} $FileI = Split-Path -Path $filePath -Leaf
Run Code Online (Sandbox Code Playgroud)
提前致谢!
在Powershell控制台中,在Windows 10(10.0.17134.0)上,F7不会像对CMD控制台那样弹出命令历史记录。有没有解决的办法?
我正在尝试制作一个脚本,其中包含比较两个文件夹项目的整齐布局的功能.该程序:
作为测试我一直在比较相同的文件夹本身(输出应该是假,假).在制作步骤1($referencepath
)函数(FolderPrompt
)时,我的程序无法正常工作,我的意思是我几乎每次运行时都会得到不同的答案.
这有效:
$referencePath = Read-Host -Prompt "Enter new DTNA folder path to check"
NameDisc
SizeDisc
function NameDisc {
write-host "Name Discrepancy: " -NoNewline
if (Compare-Object -Property name (Get-ChildItem $referencePath) - DifferenceObject (Get-ChildItem P:\DTNA_201805081923))
{return $true}
else
{return $false}
}
function SizeDisc {
write-host "Size Discrepancy: " -NoNewline
if (Compare-Object -Property length (Get-ChildItem $referencePath) - DifferenceObject (Get-ChildItem P:\DTNA_201805081923))
{return $true}
else
{return $false}
}
Run Code Online (Sandbox Code Playgroud)
但这不是:
FolderPrompt
NameDisc
SizeDisc
function FolderPrompt {
$referencePath = …
Run Code Online (Sandbox Code Playgroud) 我有以下数据集[哈希数组]:
假设ID
总是独一无二的
$dataset = @(
@{
ID = "1234567891"
Code = "ABC1111"
},
@{
ID = "1234567892"
Code = "ABC1111"
},
@{
ID = "1234567893"
Code = "ABC1112"
},
@{
ID = "1234567894"
Code = "ABC1113"
},
@{
ID = "1234567895"
Code = "ABC1114"
},
@{
ID = "1234567896"
Code = "ABC1111"
}
)
Run Code Online (Sandbox Code Playgroud)
我想要做的是Code
按键对以下数据集进行分组.
我已经尝试过多种方法,如管道Group-By
,Group-Object
,Sort-Object
但我还是没有得到我想要的结果.
我希望返回的结果是一个哈希表,看起来像[或类似的东西]:
$groupedDataset = @{
ABC1111 = @("1234567891","1234567892","1234567896")
ABC1112 = @("1234567893")
ABC1113 = @("1234567894")
ABC1114 …
Run Code Online (Sandbox Code Playgroud) 我需要访问位于包含已命名文件夹的本地路径下的文件con
.保留用于特定系统任务的文件夹名称等con
,nul
并尝试访问此类目录下的文件将导致以下消息:
如果我无法更改此类文件夹的名称,我该如何访问这些文件?
我注意到可以使用以下命令在命令提示符中创建此类文件夹名称:
md con\
Run Code Online (Sandbox Code Playgroud)
并可以删除:
rd /q /s con
Run Code Online (Sandbox Code Playgroud)
此外,可以使用资源管理器将文件拖入文件夹,从而成功添加文件.
我也尝试使用git-bash来创建,删除和打开这些目录的内容,但是一切看起来都很好但是,当我从Windows尝试时,即使文件显然在路径中也无法访问文件.
$FichierModifié = $Modele -replace "< NOM_ECOLE >" $_.NOM_ECOLE -replace "< ADDR_FW_LAN >", $_.ADDR_FW_LAN -replace "< ADDR_POOL_DHCP_LAN >", $_.ADDR_POOL_DHCP_LAN -replace "< ADDR_FW_WAN >", $_.ADDR_FW_WAN -replace "< ADDR_MASK_WAN >", $_.ADDR_MASK_WAN -replace "< ADDR_GW_WAN >", $_.ADDR_GW_WAN -replace "< MAC_FW >", $_.MAC_FW -replace "< PPPOE_USERNAME >", $_.PPPOE_USERNAME -replace "< PPPOE_PASSWORD >", $_.PPPOE_PASSWORD
Run Code Online (Sandbox Code Playgroud)
我想让这一行更具可读性.我尝试了很多我在这里找到的解决方案,但没有什么对我有用.
$Modele.Replace("<NOM_ECOLE>", $_.NOM_ECOLE).
Replace("<ADDR_FW_LAN>", $_.ADDR_FW_LAN).
Run Code Online (Sandbox Code Playgroud)
上面的代码给我一个错误
"" 是一个无效的令牌
同样与`
代替.
.
powershell ×10
cmd ×2
arrays ×1
collections ×1
filesystems ×1
ftp ×1
function ×1
grouping ×1
hashtable ×1
path ×1
percentage ×1
sorting ×1
windows ×1
windows-10 ×1