标签: powershell

在PowerShell中检查FTP服务器上的文件是否存在

我想检查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服务器?任何关于此的线索都会有所帮助.

ftp powershell ftpwebrequest

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

PowerShell SCript使用参数执行CMD.exe

因此,我已经浏览了该站点和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,因为在这几天之间,支持客户网站上的支持的人很少。

powershell cmd invoke-command

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

格式化百分比小数位并删除尾随零

考虑以下代码:

$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指定要查看小数点分隔符后的位数,而不是忽略零的位数。

powershell percentage number-formatting

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

输出前对带有Get-FileHash的Get-ChildItem结果进行排序

我尝试编写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)

这是一种解决方案,可以在将数据输出到报告文件之前,按列全路径对所有数据进行排序吗?

sorting powershell

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

从路径获取特定的文件夹名称

如何获取第四个文件夹名称并将其存储在变量中,同时循环存储在父文件夹中的文件.例如,如果路径是

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 powershell-3.0

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

在Windows 10 Powershell中通过F7使命令历史记录弹出窗口起作用

在Powershell控制台中,在Windows 10(10.0.17134.0)上,F7不会像对CMD控制台那样弹出命令历史记录。有没有解决的办法?

powershell windows-10

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

Powershell:为什么这个功能不起作用?

我正在尝试制作一个脚本,其中包含比较两个文件夹项目的整齐布局的功能.该程序:

  1. 提示用户输入文件路径
  2. 检查文件名是否不同
  3. 检查文件大小是否不同

作为测试我一直在比较相同的文件夹本身(输出应该是假,假).在制作步骤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)

powershell function powershell-3.0

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

Powershell Group具有重复项的哈希数组

我有以下数据集[哈希数组]:

假设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)

arrays collections powershell grouping hashtable

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

如何在Windows上访问位于具有保留系统名称的文件夹中的本地文件,如"CON"?

我需要访问位于包含已命名文件夹的本地路径下的文件con.保留用于特定系统任务的文件夹名称等con,nul并尝试访问此类目录下的文件将导致以下消息:

  • 命令提示符:"系统找不到指定的路径."
  • 从文件资源管理器:"无法访问"C:\ Users\USERNAME\con".句柄无效.

如果我无法更改此类文件夹的名称,我该如何访问这些文件?

我注意到可以使用以下命令在命令提示符中创建此类文件夹名称:

md con\
Run Code Online (Sandbox Code Playgroud)

并可以删除:

rd /q /s con
Run Code Online (Sandbox Code Playgroud)

此外,可以使用资源管理器将文件拖入文件夹,从而成功添加文件.

我也尝试使用git-bash来创建,删除和打开这些目录的内容,但是一切看起来都很好但是,当我从Windows尝试时,即使文件显然在路径中也无法访问文件.

windows filesystems powershell cmd path

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

多重问题

$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

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