powershell - 方法调用失败,因为 [System.IO.DirectoryInfo] 不包含名为“replace”的方法
问题描述
我有几百个文件夹来代表我所有的子网。
例如,对于文件夹名称
172.31.3.250_29
表示子网
172.31.3.250/29
因为 Windows 文件夹名称中不能有“/”。
我有大约 250 个这样的文件夹。
我正在编写一个powershell脚本,它将获取每个文件夹名称并针对该文件夹所代表的“子网”运行一个脚本,并将日志转储到该文件夹中。
但是,我被困在一个简单的问题上。
我已成功提取文件夹中所有子文件夹的名称
我需要用“/”替换“_”来表示我的脚本的正确子网格式。
$NmapFolder = Get-ChildItem -Path "U:\nmap reports\Nmap Subnet Scans\August2019" -Recurse -Directory -Force -ErrorAction SilentlyContinue
$data = ForEach ($items in $NmapFolder){
$items = $items.replace('_','/')
#eventually will have nmap script logic
#eventually will have "wait for nmap done" check before proceeding with next folder/subnet
write-host $items
}
这会产生错误...
Method invocation failed because [System.IO.DirectoryInfo] does not contain a method named 'replace'.
At line:6 char:1
+ $items = $items.replace('_','/')
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (:) [], RuntimeException
+ FullyQualifiedErrorId : MethodNotFound
解决方案
Get-ChildItem
返回一个System.IO.DirectoryInfo
或System.IO.FileInfo
对象,而不是字符串。由于您已指定-Directory
,您首先需要将DirectoryInfo
对象转换为字符串。
一种简单的方法是更改代码的第一行:
$NmapFolder = @( ( Get-ChildItem -Path "U:\nmap reports\Nmap Subnet Scans\August2019" -Recurse -Directory -Force -ErrorAction SilentlyContinue ).Name )
这会将每个返回对象的 Name 属性汇总DirectoryInfo
到一个字符串数组中,然后您可以对其进行迭代。但是,如果您要遍历更深的目录结构(我假设您可能会因为您正在使用-Recurse
),您可能需要考虑使用管道将您的Get-ChildItem
命令输入Resolve-Path -Relative
,并从该字符串数组中解析您的子网文件夹名称,因为它看起来就像最终你可以尝试从这个脚本写回那个文件夹。
推荐阅读
- c# - 动态 WPF 数据网格。计算函数列逻辑
- android - 在 Android 上的短语之间进行语音暂停(TalkBack 和 Text-To-Speech)
- erlang - Erlang如何混合try catch和if
- vast - VPAID 脚本无法在 VAST 4 中加载
- h2 - 当我使用 H2 数据库作为嵌入式时,Gluon 应用程序无法在 ios 上加载 FXML
- android - 带有渐变的Android可绘制圆圈
- django - 部署 Django 应用程序 HTTPD
- oracle-apex - 创建一个插入值表作为添加的图像
- tfs - 继承项目迭代的 TFS 团队
- android - 可扩展的列表视图不适合 android 中的整个片段