Я рекомендую сохранить результаты вашей команды в переменной. Такие как:
$drives = Get-PSDrive
Переменная может быть проиндексирована следующим образом:
Первый элемент:
$drives[0]
Последний элемент:
$drives[-1]
Вы можете перебирать каждый элемент с помощью foreach
:
foreach ($drive in $drives) {
# current drive is $drive
}
Или ForEach-Object
командлет:
$drives | ForEach-Object {
# current drive is $_
}
Теперь, когда у вас есть данные для заполнения таблицы, вы готовы подключиться к базе данных и выполнить вставку записей базы данных.
Вы можете использовать командлеты SQL-сервера Powershell или подключиться с помощью объектов .NET. В зависимости от того, какая у вас версия SQL-сервера, вам будет предложено выбрать, какой из них использовать. SQL Server 2008 имеет командлеты Powershell, а 2005 - нет. Здесь много информации об интеграции SQL Server 2008 Powershell здесь . Для SQL Server 2005 у вас есть несколько разных вариантов. Ответ на этот вопрос здесь содержит список параметров Powershell для использования с SQL Server 2005.
Подробнее:
Когда Powershell отображает информацию об объекте, он использует систему типов, чтобы выборочно определять, какие свойства объекта отображать на экране. Не все объекты отображаются. Powershell использует XML-файлы, чтобы определить, какие свойства отображать и которые хранятся в каталоге Powershell:
dir $PSHOME/*format* | select Name
Объекты, возвращаемые из Get-PsDrive
, имеют тип System.Management.Automation.PSDriveInfo
. Файл PowerShellCore.format.ps1xml
сообщает механизму форматирования, какие свойства отображать в окне Powershell. Возможно, это именно те свойства, которые вы ищете, однако многие объекты имеют дополнительные свойства, которые не отображаются. Например, объект типа System.IO.DirectoryInfo
не будет иметь все свои свойства, отображаемые по умолчанию. Остальные свойства объектов можно просмотреть с помощью командлета Get-Member
, например:
Get-Item $env:windir | Get-Member
Здесь будут показаны все методы и свойства объекта. Вы также можете просмотреть все свойства объекта с помощью командлета Select-Object
, используя подстановочный знак для параметра свойства:
Get-Item $env:windir | Select-Object -Property *
Для доступа к значениям свойств объекта используйте следующий синтаксис:
$objectVariable.ObjectProperty
Теперь, когда вы знаете, как просматривать свойства объектов и обращаться к их значениям, вам нужно использовать это для создания оператора Insert
SQL. Вот пример использования командлета Invoke-SqlCmd
, поставляемого с SQL Server 2008.
Invoke-Sqlcmd -ServerInstance $env:COMPUTERNAME -Database Test -Query "Insert MyTable values ('a', 'b')"
Вот пример циклического перебора объектов, возвращаемых из Get-PsDrive
, при условии, что у вас есть таблица с именем MyTable и в ней есть как минимум два столбца, которые принимают текстовые данные:
Get-PsDrive | ForEach-Object {
$providerName = $_.Name
$providerRoot = $_.Root
Invoke-Sqlcmd -ServerInstance $env:COMPUTERNAME -Database Test -Query "Insert MyTable values ('$providerName', '$providerRoot')"
}