2015-04-29 6 views
1

Я запускаю следующий SQL-запрос через скрипт powershell и должен запускать сценарий несколько раз для разных файлов. Так что я пытаюсь выяснить, как указать путь к файлу в качестве переменной при запуске скрипта?Powershell: указать путь к файлу как переменную

update [$Db_name].[dbo].[$BatchTable] 
set [$Db_name].[dbo].[$BatchTable].Wave = 'Wave1.1' 
from [$Db_name].[dbo].[$BatchTable] 
inner join OPENROWSET(BULK 'FilePath\file.csv',  
FORMATFILE= 'E:\import.xml') AS a 
on ([$Db_name].[dbo].[$BatchTable].Name= a.Name) and 
([$Db_name].[dbo].[$BatchTable].Domain = a.Domain) 

The «FilePath \ FILE.CSV» это путь к файлу мне нужно определить как переменную, так что мой код будет вместо этого выглядеть следующим образом:

inner join OPENROWSET(BULK '$INPUTFILEPATH',  
FORMATFILE= 'E:\import.xml') AS a 

Любая помощь или потенциально более эффективных методов это очень поможет.

От команды, как я хочу, чтобы иметь возможность запускать скрипт так:

CMD: updatescript.ps1 $ INPUTFILEPATH = C: \ Documents \ myfile.csv

Опять же, я не уверен, что это лучший способ сделать это?

ответ

2

вы почти там. Вам нужно будет добавить блок параметров в самом начале вашего скрипта, например.

Param( 
[Parameter(Mandatory=$true)] 
[ValidateScript({Test-Path $_ -PathType 'leaf'})] 
[string] $InputFilePath 
) 

Это создает обязательный (не необязательный) параметр строки, называется InputFilePath и ValidateScript является код, который используется для проверки параметров, в этом случае проверка существует ли файл с помощью Test-Path Командлет и pathtype из листьев (если проверка наличие использования каталога 'container').

При запуске сценарий используется синтаксис ниже:

updatescript.ps1 -INPUTFILEPATH "C:\Documents\myfile.csv" 

и в сценарии использовать переменную как путь точно так, как в вашем вопросе:

inner join OPENROWSET(BULK '$INPUTFILEPATH',  
FORMATFILE= 'E:\import.xml') AS a 

Примечание: в PowerShell когда это используя параметры при запуске скрипта, вам нужно всего лишь использовать наименьшее количество символов, которые однозначно идентифицируют этот параметр из всех остальных в вашем блоке параметров - в этом случае -I работает так же, как и -InputFilePath.

2

Вы можете передать параметры командной строки сценарию powershell, используя param.

Пример:

param(
    [string]$INPUTFILEPATH 
) 

И затем вызвать скрипт следующим образом:

updatescript.ps1 -INPUTFILEPATH C:\Documents\myfile.csv 

Более подробную информацию о параметрах CMD линии можно найти here

Смежные вопросы