Запуск удаленных процессов в сети Windows

Используйте окно Pyspark, соберите предыдущие значения 5 col в виде списка и вызовите best_fit_udf

#moodified this function to handle 0 division and size of elements
def best_fit(X, Y):
    xbar = sum(X)/len(X)
    ybar = sum(Y)/len(Y)
    n = len(X)
    if n < 6 :
       return None
    numer = sum([xi*yi for xi,yi in zip(X, Y)]) - n * xbar * ybar
    denum = sum([xi**2 for xi in X]) - n * xbar**2
    if denum == 0:
       return None
    else:
       return numer / denum

best_fit_udf = udf(best_fit, DoubleType())

cols = ['x_vals','y_vals']
df = pd.DataFrame(columns=cols)
for i in range(0,20):
  df.loc[i,'x_vals'] = i
  df.loc[i,'y_vals'] = 0.05 * i**2 + 0.1 * i + random.uniform(-1,1) #some random parabolic points

spark_df = spark.createDataFrame(df)

w = Window.orderBy("x_vals").rowsBetween(-5, 0)

df = spark_df.select("x_vals","y_vals",(F.collect_list('x_vals')).over(w).alias("x_list"), (F.collect_list('y_vals')).over(w).alias("y_list"))

df.withColumn("slope", best_fit_udf('x_list','y_list') ).drop('x_list','y_list').show()

, что даст мне

+------+--------------------+------------------+
|x_vals|              y_vals|             slope|
+------+--------------------+------------------+
|     0|-0.05626232194330516|              null|
|     1|  1.0626613654187942|              null|
|     2|-0.18870622421238525|              null|
|     3|  1.7106172105001147|              null|
|     4|  1.9398571272258158|              null|
|     5|  2.3632022124308474| 0.475092382628695|
|     6|  1.7264493731921893|0.3201115790149247|
|     7|   3.298712278452215|0.5116552596172641|
|     8|  4.3179382280764305|0.4707547914949186|
|     9|    4.00691449276564|0.5077645079970263|
|    10|   6.085792506183289|0.7563877936316236|
|    11|   7.272669055040746|1.0223232959178614|
|    12|    8.70598472345308| 1.085126649123283|
|    13|  10.141576882812515|1.2686365861314373|
|    14|  11.170519757896672| 1.411962717827295|
|    15|  11.999868557507794|1.2199864149871311|
|    16|   14.86294824152797|1.3960568659909833|
|    17|  16.698964370210007| 1.570238888844051|
|    18|   18.71951724368806|1.7810890092953742|
|    19|  20.428078271618062|1.9509358501665701|
+------+--------------------+------------------+
7
задан Amro 2 July 2012 в 06:45
поделиться

7 ответов

PsExec является частью sysinternals комплекта, который может сделать это

http://technet.microsoft.com/en-us/sysinternals/bb897553.aspx

Если Ваши серверы запускают Windows 2008, можно также использовать

Службы удаленных рабочих столов удаленное приложение

6
ответ дан 6 December 2019 в 23:13
поделиться

Вы можете использовать команду "at".

Откройте командную строку и введите

at /?

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

Существует эквивалент WMI и те же основные предостережения, что и в:

ЛИСТ 3: Код для создания Интерактивный процесс на машинах Windows Server 2003, Windows XP и Windows 2000 SP3

Const INTERVAL = "n"
Const MINUTES  = 1

strComputer = "compaq575"
strCommand  = "calc.exe"

Set objWMIService = _
    GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set objScheduledJob = objWMIService.Get("Win32_ScheduledJob")

Set objSWbemDateTime = _
    CreateObject("WbemScripting.SWbemDateTime")
objSWbemDateTime.SetVarDate(DateAdd(INTERVAL, _
    MINUTES, Now()))

intReturnValue = objScheduledJob.Create(strCommand, _
    objSWbemDateTime.Value, False, 0, 0, True, intJobID)
WScript.Echo "Job ID: " & intJobID

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

1
ответ дан 6 December 2019 в 23:13
поделиться

Следующие два сообщения используют .NET для выполнения удаленных процессов.

  1. Использование WMI

    http://weblogs.asp.net/steveschofield/archive/2006/06/06/WMI---start-a-process-on-remote-machine-passing-credentials_2E00_.aspx

  2. Пример Codeproject

http://www.codeproject.com/KB/IP/RemotingExec.aspx

Примеры выполняются с пользовательскими учетными данными и Надеюсь, это поможет.

1
ответ дан 6 December 2019 в 23:13
поделиться

Если группа enire находится под вашим контролем, возможно, удастся реализовать эти удаленные процессы как службы Windows. Служба может быть интерактивной (хотя и не по умолчанию), и ею можно удаленно управлять через стандартный диспетчер управления службами, работающий на каждом ПК с Windows.

1
ответ дан 6 December 2019 в 23:13
поделиться

Могу я спросить, зачем подчиненным процессам нужен графический интерфейс? У меня аналогичная настройка, но графический интерфейс мне нужен только во время первоначальной настройки.

В любом случае, вот что я сделал, но, к сожалению, он зависит от процесса, запущенного под учетной записью LocalSystem, которую, как я понимаю, вы пытаетесь избегайте, если вам действительно нужен графический интерфейс.

Чтобы дать вам небольшую справку, приложение, которое я должен был распространить, было Hudson , и это была более ранняя версия, в которой способ распространения заключается в запуске приложения Java WebStart и, следовательно, потребность в графическом интерфейсе пользователя (по крайней мере, во время настройки, чтобы помочь в устранении неполадок).

Я настроил подчиненное устройство приложения как службы на подчиненных машинах с помощью sc.exe (который является PITA, чтобы получить право, к счастью, вы делаете это только один раз). Что-то вроде:

sc.exe create SlaveService binPath= c:\path\to\slave.exe type= interact DisplayName= "The Slave Service"

Обратите внимание на пробелы после параметров (binPath = etc), они необходимы. Также обратите внимание, что мне было проще удалить "type = interact" и вручную изменить его в сервисной консоли.

Затем на главном компьютере, также используя sc.exe, я запускаю службу удаленно:

sc.exe \\slavemachine start SlaveService

И проверял, что программа работала на подчиненных машинах.

Теперь в моем случае мне действительно не требовался графический интерфейс, кроме как для первоначального устранения неполадок.

1
ответ дан 6 December 2019 в 23:13
поделиться

Чтобы это произошло, вам понадобится пара компонентов.

Во-первых, вам понадобится способ связи с удаленной машиной.

Во-вторых, вы на удаленной машине потребуется что-то, что может запустить ваше приложение.

Другие предложения, прежде всего, используют что-то встроенное для одного или обоих этих компонентов, что нормально, если ограничения любого из указанных подходящие решения.

PsExec выглядит как наиболее многообещающее готовое решение. В противном случае вы можете развернуть свое собственное приложение для прослушивания простых сообщений через TCP / именованные каналы / что угодно и просто создать соответствующие подпроцессы. Единственное предостережение: вы должны быть очень осторожны в вопросах безопасности, особенно если какая-либо из машин находится в открытом доступе.

1
ответ дан 6 December 2019 в 23:13
поделиться

Пакет PSTools был разработан Sysinternals и был настолько хорош, что через некоторое время компания была куплена Microsoft. Использование этих инструментов - лучший способ выполнить вашу задачу.

Я вижу, вы упомянули проблему с интерактивным запуском приложений. Могу я предложить использовать переключатель / i для интерактивного запуска приложения. PSTools предлагает все функции, которые вам нужны. Вам просто нужно поиграть с переключателями, чтобы получить желаемый результат.

Я никогда не испытывал такой медлительности, которую вы описываете в моих приложениях, использующих PSTools.

0
ответ дан 6 December 2019 в 23:13
поделиться
Другие вопросы по тегам:

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