Как запустить сценарий командной строки из PowerShell? [Дубликат]

Типы ссылок по умолчанию равны null, чтобы указать, что они не ссылаются на какой-либо объект. Следовательно, если вы попытаетесь получить доступ к объекту, на который ссылаетесь, а его нет, вы получите исключение NullReferenceException.

Для Ex:

SqlConnection connection = null;
connection.Open();

Когда вы запускаете это кода, вы получите:

System.NullReferenceException: Object reference not set to an instance of an object.

Вы можете избежать этой ошибки, например, следующим образом:

if (connection != null){
    connection.Open();
}

Примечание. Чтобы избежать этой ошибки, вы всегда должны инициализировать свои объекты прежде чем пытаться что-либо сделать с ними.

5
задан Limited Atonement 13 January 2011 в 21:59
поделиться

5 ответов

Проблема в том, что PS почему-то разбирает -Dresourcepath=. иначе, чем cmd. Что работает

java -cp '.;.\common.jar' -Dcontext=atest1 "-Dresourcepath=." DW_Install

Не имеет значения, в каком направлении идет слэш, и не имеет значения, какие кавычки используются (' или "). Однако путь класса должен быть экранирован какими-то кавычками. Хороший тест, чтобы понять, что получает переводчик PS, - это повторить его. Следующее:

echo java -cp '.;.\common.jar' -Dcontext=atest1 -Dresourcepath=. DW_Install

выводит следующий результат:

java
-cp
.;.\common.jar
-Dcontext=etaste1
-Dresourcepath=
.
DW_Install

(Обратите внимание, что путь ресурса и значение пути к ресурсу не находятся в одной строке.) Если вывод в

echo java -cp '.;.\common.jar' -Dcontext=atest1 '-Dresourcepath=.' DW_Install

дает следующий результат:

java
-cp
.;.\common.jar
-Dcontext=etaste1
-Dresourcepath=.
DW_Install

Это намного больше по душе.

Хотя я этого не желаю никому из вас, я надеюсь что этот пост помогает тем из вас, которые должны развертывать java-проекты на компьютерах Windows (хотя они никогда не будут работать на какой-либо другой платформе).

7
ответ дан Limited Atonement 31 August 2018 в 23:21
поделиться
start-process -nnw java "-cp .;./common.jar -Dcontext=atest1 -Dresourcepath=. DW_Install"
0
ответ дан Bill Moore 31 August 2018 в 23:21
поделиться

Другой пример, основанный на https://gaming.stackexchange.com/questions/24543/how-do-i-change-player-name-in-minecraft-multiplayer-in-offline-mode-in- linux

function mineCraftAs {
    Param (
        [parameter(mandatory=$true, HelpMessage="Minecraft character name." ,ValueFromPipeline=$true)]
        [string] $name
    )
    if(!(test-path $env:appdata)) { $(throw "Appdata not found at $env:appdata")}
    $private:minecraftPath=Join-Path $env:appdata .minecraft
    if(!(test-path $minecraftPath)) { $(throw "Minecraft not found at $minecraftpath")}
    $private:minebinPath=join-path $minecraftPath "bin"
    if(!(test-path $minebinPath)) { $(throw "Minecraft bin not found at $minebinPath")}

    $minebinPath | write-debug
    gci $minebinpath | write-debug

    #java -Xms512m -Xmx1024m -cp "%APPDATA%/.minecraft\bin\*" -Djava.library.path="%APPDATA%\.minecraft\bin\natives" net.minecraft.client.Minecraft '"'%1'"'

    echo java -Xms512m -Xmx1024m  -cp ('"'+$minebinPath+'\*"') ('-Djava.library.path="'+$minebinPath+'\natives"') net.minecraft.client.Minecraft ($name)

    $minecraftJob=& 'C:\Program Files (x86)\Java\jre6\bin\java.exe' -Xms512m -Xmx1024m  -cp ('"'+$minebinPath+'\*"') ('-Djava.library.path="'+$minebinPath+'\natives"') net.minecraft.client.Minecraft ($name)
}
minecraftas newbie
3
ответ дан Community 31 August 2018 в 23:21
поделиться

Должно работать следующее:

java.exe -cp '.;./common.jar' -Dcontext=atest1 -Dresourcepath=. DW_Install

Я полагаю, что PowerShell интерпретирует ; в пути к классам как разделитель команд, тем самым пытаясь запустить java -cp . и ./common.jar -D....

1
ответ дан Joey 31 August 2018 в 23:21
поделиться

Запуск внешних программ командной строки из PowerShell иногда бывает проблематичным, потому что PowerShell предоставляет два разных режима синтаксического разбора, которые вызывают различные синтаксисы указанных внешних программ.

В любом случае, запуск команды в Powershell требуется использовать префикс . ( dot- "sourcing" ) или оператор &.

Вы можете обойти это, передав каждый параметр во внешнюю программу как отдельные переменные, например:

PS> $classpath = ".;./common.jar"
PS> $env = "-Dcontext=atest1 -Dresourcepath=."
PS> $class = "DW_Install"

PS> . java.exe -cp $classpath $env $class
5
ответ дан Maxime Labelle 31 August 2018 в 23:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: