从 Excel 粘贴数据并转换成数组?
Paste data from Excel and convert into an array?
我是新的 powershell,想从 Excel 中获取服务器列表,然后直接粘贴到输入 window 中。应该分开处理,一个接一个处理。
即
给出服务器名称:
arvdel1
arvdel2
arvdel3
arvdel4
应该是
$a=@(arvdel1,arvdel2,arvdel3,arvdel4)
我该怎么做?
这是您需要的部分:
try {
$excel = New-Object -ComObject Excel.Application
$workbook = $excel.Workbooks.Open('E:\Temp\Data.xlsx')
$xlSheet = $excel.Sheets.Item('Sheet1')
$a = @($xlSheet.Range("A1:A4").Value2)
#prefered to use named range
#$xlSheet.Range("Items").Value2
} finally {
$workbook.Close()
$excel.Quit()
[Runtime.InteropServices.Marshal]::ReleaseComObject($excel) | Out-Null
}
$a | sort | % {
#process
"Processing: $_"
}
编辑:
要拆分字符串,请使用 -split:
'arvdel1,arvdel2,arvdel3,arvdel4' -split ','
不清楚你在找什么。
- 您无法将 excel 单元格范围粘贴到 powershell 控制台提示中而不会出现一堆错误。
- PowerShell 脚本可以在自己的提示下等待接受输入,
- 这里的第一个问题是单个输入 (
Read-Host
) 将由 cr/lf
序列终止什么是 excel 用来分隔相邻的 ROW。所以你需要一个循环来捕获所有粘贴的行。第二个问题是您不知道何时处理所有行。
- 复制多列范围时,它们是 TAB 分隔的
要使用 multiplte cols/rows 处理 unknwon 剪贴板(文本)内容,我会使用(如评论中所建议的)Get-Clipboard
并使用基于 RegEx 的拆分运算符和 OR 进行拆分一个 TAB 或 CR/LF
> (Get-Clipboard) -split '\t|\r?\n'
arvdel1
arvdel2
arvdel3
arvdel4
> (Get-Clipboard) -split '\t|\r?\n'
arvdel1
arvdel2
arvdel3
arvdel4
> (Get-Clipboard) -split '\t|\r?\n'
arvdel1
arvdel2
arvdel3
arvdel4
arvdel2
C3
D3
E3
arvdel3
C4
D4
E4
arvdel4
C5
D5
E5
除了输出到控制台,您当然可以分配给一个变量或直接附加一个 ForEach-Object
来处理它们。
编辑:另一种方法是直接从 PowerShell
读取上述 excel 文件
使用 DFinke's ImportExcel module:
> import-excel .\Data.xlsx
ServersCol
----------
arvdel1
arvdel2
arvdel3
arvdel4
我得到 solution.My 脚本将从剪贴板以数组形式获取输入并为每个 server.All 执行任何命令我必须做的是从记事本和 [=15 复制任意数量的服务器=] 脚本
样本:
$d = @(获取剪贴板)
foreach($d 中的 $i)
{
写输出 "Hi"
}
$cli=读取主机("Enter the servers")
$a=$cli.Replace("`n",",")
$b=$a.split(",")
foreach($i in $b)
{
写主机“嗨”
}
o/p:
输入服务器:1.1.1.1
2.2.2.2
3.3.3.3
你好
你好
嗨
我在需要粘贴计算机名称列表的脚本中使用它:
$MultilineInput = Read-Host "Enter List of Computer Names"
$PCQueryList = @"
$MultilineInput
"@ -split '\r\n'
为确认您粘贴的列表是唯一对象,运行 $PCQueryList.count 和 $MultilineInput.count
arvdel1
arvdel2
arvdel3
arvdel4
$$PCQueryList.count
4
$ $多行输入
1
您可以使用类型为字符串数组 [string[]] 的必需参数(对于低于 5.1 的 Powershell 版本或 'Get-Clipboard' 对于 5.1 或更高版本)。它将提示您输入每个数组元素的值,直到它检测到输入的空白行。
我最近通过查看脚本的输入参数弄明白了这一点。多年来,我一直在使用 Excel 的转置和替换记事本中的 'Tab' 个字符将文本处理成 PowerShell 单行数组格式。
仅供参考 PowerShell 单行数组格式为 ("1", "2", "3", "4", "5")
...
param
(
[parameter(Mandatory = $true)]
[string[]]
$listOfStrings
)
...
填充字符串数组的示例提示
Supply values for the following parameters:
listOfStrings[0]:
我在记事本(或 Excel)中创建了 1 到 5 的列表,并将其直接复制到 PowerShell window。下面是我的示例输出。
1
2
3
4
5
Supply values for the following parameters:
listOfStrings[0]: 1
listOfStrings[1]: 2
listOfStrings[2]: 3
listOfStrings[3]: 4
listOfStrings[4]: 5
listOfStrings[5]:
1
2
3
4
5
我是新的 powershell,想从 Excel 中获取服务器列表,然后直接粘贴到输入 window 中。应该分开处理,一个接一个处理。
即 给出服务器名称:
arvdel1 arvdel2 arvdel3 arvdel4
应该是
$a=@(arvdel1,arvdel2,arvdel3,arvdel4)
我该怎么做?
这是您需要的部分:
try {
$excel = New-Object -ComObject Excel.Application
$workbook = $excel.Workbooks.Open('E:\Temp\Data.xlsx')
$xlSheet = $excel.Sheets.Item('Sheet1')
$a = @($xlSheet.Range("A1:A4").Value2)
#prefered to use named range
#$xlSheet.Range("Items").Value2
} finally {
$workbook.Close()
$excel.Quit()
[Runtime.InteropServices.Marshal]::ReleaseComObject($excel) | Out-Null
}
$a | sort | % {
#process
"Processing: $_"
}
编辑: 要拆分字符串,请使用 -split:
'arvdel1,arvdel2,arvdel3,arvdel4' -split ','
不清楚你在找什么。
- 您无法将 excel 单元格范围粘贴到 powershell 控制台提示中而不会出现一堆错误。
- PowerShell 脚本可以在自己的提示下等待接受输入,
- 这里的第一个问题是单个输入 (
Read-Host
) 将由cr/lf
序列终止什么是 excel 用来分隔相邻的 ROW。所以你需要一个循环来捕获所有粘贴的行。第二个问题是您不知道何时处理所有行。 - 复制多列范围时,它们是 TAB 分隔的
- 这里的第一个问题是单个输入 (
要使用 multiplte cols/rows 处理 unknwon 剪贴板(文本)内容,我会使用(如评论中所建议的)Get-Clipboard
并使用基于 RegEx 的拆分运算符和 OR 进行拆分一个 TAB 或 CR/LF
> (Get-Clipboard) -split '\t|\r?\n'
arvdel1
arvdel2
arvdel3
arvdel4
> (Get-Clipboard) -split '\t|\r?\n'
arvdel1
arvdel2
arvdel3
arvdel4
> (Get-Clipboard) -split '\t|\r?\n'
arvdel1
arvdel2
arvdel3
arvdel4
arvdel2
C3
D3
E3
arvdel3
C4
D4
E4
arvdel4
C5
D5
E5
除了输出到控制台,您当然可以分配给一个变量或直接附加一个 ForEach-Object
来处理它们。
编辑:另一种方法是直接从 PowerShell
读取上述 excel 文件
使用 DFinke's ImportExcel module:
> import-excel .\Data.xlsx
ServersCol
----------
arvdel1
arvdel2
arvdel3
arvdel4
我得到 solution.My 脚本将从剪贴板以数组形式获取输入并为每个 server.All 执行任何命令我必须做的是从记事本和 [=15 复制任意数量的服务器=] 脚本 样本: $d = @(获取剪贴板) foreach($d 中的 $i) { 写输出 "Hi" }
$cli=读取主机("Enter the servers") $a=$cli.Replace("`n",",") $b=$a.split(",") foreach($i in $b) { 写主机“嗨” }
o/p:
输入服务器:1.1.1.1 2.2.2.2 3.3.3.3 你好 你好 嗨
我在需要粘贴计算机名称列表的脚本中使用它:
$MultilineInput = Read-Host "Enter List of Computer Names"
$PCQueryList = @"
$MultilineInput
"@ -split '\r\n'
为确认您粘贴的列表是唯一对象,运行 $PCQueryList.count 和 $MultilineInput.count
arvdel1 arvdel2 arvdel3 arvdel4
$$PCQueryList.count 4
$ $多行输入 1
您可以使用类型为字符串数组 [string[]] 的必需参数(对于低于 5.1 的 Powershell 版本或 'Get-Clipboard' 对于 5.1 或更高版本)。它将提示您输入每个数组元素的值,直到它检测到输入的空白行。
我最近通过查看脚本的输入参数弄明白了这一点。多年来,我一直在使用 Excel 的转置和替换记事本中的 'Tab' 个字符将文本处理成 PowerShell 单行数组格式。
仅供参考 PowerShell 单行数组格式为 ("1", "2", "3", "4", "5")
...
param
(
[parameter(Mandatory = $true)]
[string[]]
$listOfStrings
)
...
填充字符串数组的示例提示
Supply values for the following parameters:
listOfStrings[0]:
我在记事本(或 Excel)中创建了 1 到 5 的列表,并将其直接复制到 PowerShell window。下面是我的示例输出。
1
2
3
4
5
Supply values for the following parameters:
listOfStrings[0]: 1
listOfStrings[1]: 2
listOfStrings[2]: 3
listOfStrings[3]: 4
listOfStrings[4]: 5
listOfStrings[5]:
1
2
3
4
5