Я пишу сценарий Powershell, который извлечет набор файлов данных из ZIP-файла и затем присоединит их к серверу.Я написал функцию, которая заботится о распаковке, и, так как мне нужно захватить все файлы, чтобы я знал, что я прикрепляю, я возвращаю это из функции:
function Unzip-Files
{
param([string]$zip_path, [string]$zip_filename, [string]$target_path, [string]$filename_pattern)
# Append a \ if the path doesn't already end with one
if (!$zip_path.EndsWith("\")) {$zip_path = $zip_path + "\"}
if (!$target_path.EndsWith("\")) {$target_path = $target_path + "\"}
# We'll need a string collection to return the files that were extracted
$extracted_file_names = New-Object System.Collections.Specialized.StringCollection
# We'll need a Shell Application for some file movement
$shell_application = New-Object -com shell.Application
# Get a handle for the target folder
$target_folder = $shell_application.NameSpace($target_path)
$zip_full_path = $zip_path + $zip_filename
if (Test-Path($zip_full_path))
{
$target_folder = $shell_application.NameSpace($target_path)
$zip_folder = $shell_application.NameSpace($zip_full_path)
foreach ($zipped_file in $zip_folder.Items() | Where {$_.Name -like $filename_pattern})
{
$extracted_file_names.Add($zipped_file.Name) | Out-Null
$target_folder.CopyHere($zipped_file, 16)
}
}
$extracted_file_names
}
Затем я вызываюдругая функция для фактического присоединения базы данных (я удалил некоторый код, который проверяет существование базы данных, но это не должно влиять здесь):
function Attach-Database
{
param([object]$server, [string]$database_name, [object]$datafile_names)
$database = $server.Databases[$database_name]
$server.AttachDatabase($database_name, $datafile_names)
$database = $server.Databases[$database_name]
Return $database
}
Я продолжаю получать сообщение об ошибке: «Не могупреобразовать аргумент "1", со значением: "System.Object []", для "AttachDatabase", чтобы ввести "System.Collections.Specialized.StringCollection" ".
Я попытался объявить типы данных явно вразличные точки, но это просто меняет место, где я получаю ошибку (или одну похожую на нее).Я также изменил объявление параметра, чтобы использовать коллекцию строк вместо объекта без удачи.
Я начинаю с коллекции строк и в конечном итоге хочу использовать коллекцию строк.Кажется, я просто не могу заставить Powershell перестать пытаться преобразовать его в общий объект в какой-то момент.
Есть предложения?
Спасибо!