Update
Signed-off-by: Lev Rusanov <30170278+JDM170@users.noreply.github.com>
This commit is contained in:
1
.gitignore
vendored
1
.gitignore
vendored
@@ -1,4 +1,5 @@
|
|||||||
.vs
|
.vs
|
||||||
bin/
|
bin/
|
||||||
obj/
|
obj/
|
||||||
|
packages/
|
||||||
*.csproj.user
|
*.csproj.user
|
||||||
|
|||||||
106
Program.cs
106
Program.cs
@@ -10,6 +10,7 @@ using System.Threading;
|
|||||||
using System.Net;
|
using System.Net;
|
||||||
using System.DirectoryServices;
|
using System.DirectoryServices;
|
||||||
using System.Security.Principal;
|
using System.Security.Principal;
|
||||||
|
using Renci.SshNet;
|
||||||
|
|
||||||
namespace domain_utility
|
namespace domain_utility
|
||||||
{
|
{
|
||||||
@@ -30,14 +31,15 @@ namespace domain_utility
|
|||||||
{ "^[rR]\\d*[-]\\d+[a-zA-Z]+\\d+$", "" } // R54-630300THE01
|
{ "^[rR]\\d*[-]\\d+[a-zA-Z]+\\d+$", "" } // R54-630300THE01
|
||||||
};
|
};
|
||||||
|
|
||||||
private static string InputRemoteComputer(string str, Action callback)
|
private static string InputData(string str, Action callback, bool withClear = true)
|
||||||
{
|
{
|
||||||
Console.Clear();
|
if (withClear)
|
||||||
|
Console.Clear();
|
||||||
Console.WriteLine(str);
|
Console.WriteLine(str);
|
||||||
Console.Write("> ");
|
Console.Write("> ");
|
||||||
string remote = Console.ReadLine().Trim();
|
string remote = Console.ReadLine().Trim();
|
||||||
if (remote == string.Empty || remote.Length == 0)
|
if (remote == string.Empty || remote.Length == 0)
|
||||||
InputRemoteComputer(str, callback);
|
InputData(str, callback);
|
||||||
Console.WriteLine();
|
Console.WriteLine();
|
||||||
return remote;
|
return remote;
|
||||||
}
|
}
|
||||||
@@ -136,15 +138,15 @@ namespace domain_utility
|
|||||||
|
|
||||||
private static void ShowDomainUserInfo()
|
private static void ShowDomainUserInfo()
|
||||||
{
|
{
|
||||||
string username = InputRemoteComputer("\nВведите имя пользователя (пр. 'lev.rusanov'): ", ShowDomainUserInfo);
|
string username = InputData("\nВведите имя пользователя (пр. 'lev.rusanov'): ", ShowDomainUserInfo);
|
||||||
|
|
||||||
username = $"user {username} /domain";
|
username = $"user {username} /domain";
|
||||||
|
|
||||||
ProcessStartInfo procStartInfo = new ProcessStartInfo("net", username)
|
ProcessStartInfo procStartInfo = new ProcessStartInfo("net", username)
|
||||||
{
|
{
|
||||||
CreateNoWindow = true,
|
CreateNoWindow = true,
|
||||||
|
UseShellExecute = false,
|
||||||
RedirectStandardOutput = true,
|
RedirectStandardOutput = true,
|
||||||
UseShellExecute = false
|
|
||||||
};
|
};
|
||||||
Process proc = new Process { StartInfo = procStartInfo };
|
Process proc = new Process { StartInfo = procStartInfo };
|
||||||
proc.Start();
|
proc.Start();
|
||||||
@@ -188,7 +190,7 @@ namespace domain_utility
|
|||||||
|
|
||||||
private static void ShowComputerBootupTime()
|
private static void ShowComputerBootupTime()
|
||||||
{
|
{
|
||||||
string remote = InputRemoteComputer("\nВведите IP адрес или имя компьютера (пр. 10.234.16.129, 'IT04', '630300IT04', 'R54-630300IT04'): ",
|
string remote = InputData("\nВведите IP адрес или имя компьютера (пр. 10.234.16.129, 'IT04', '630300IT04', 'R54-630300IT04'):",
|
||||||
ShowComputerBootupTime);
|
ShowComputerBootupTime);
|
||||||
|
|
||||||
if (!IsStringContainIp(remote))
|
if (!IsStringContainIp(remote))
|
||||||
@@ -224,7 +226,7 @@ namespace domain_utility
|
|||||||
|
|
||||||
private static void StartPing()
|
private static void StartPing()
|
||||||
{
|
{
|
||||||
string remote = InputRemoteComputer("\nВведите IP адрес или имя компьютера (пр. 10.234.16.129, 'IT04', '630300IT04', 'R54-630300IT04'): ",
|
string remote = InputData("\nВведите IP адрес или имя компьютера (пр. 10.234.16.129, 'IT04', '630300IT04', 'R54-630300IT04'):",
|
||||||
StartPing);
|
StartPing);
|
||||||
|
|
||||||
if (!IsStringContainIp(remote))
|
if (!IsStringContainIp(remote))
|
||||||
@@ -266,7 +268,7 @@ namespace domain_utility
|
|||||||
|
|
||||||
private static void OpenComputerCups()
|
private static void OpenComputerCups()
|
||||||
{
|
{
|
||||||
string remote = InputRemoteComputer("\nВведите IP адрес или имя компьютера (пр. 10.234.16.129, 'IT04', '630300IT04', 'R54-630300IT04'): ",
|
string remote = InputData("\nВведите IP адрес или имя компьютера (пр. 10.234.16.129, 'IT04', '630300IT04', 'R54-630300IT04'):",
|
||||||
OpenComputerCups);
|
OpenComputerCups);
|
||||||
|
|
||||||
if (!IsStringContainIp(remote))
|
if (!IsStringContainIp(remote))
|
||||||
@@ -287,7 +289,7 @@ namespace domain_utility
|
|||||||
|
|
||||||
private static void StartRDPConnection()
|
private static void StartRDPConnection()
|
||||||
{
|
{
|
||||||
string remote = InputRemoteComputer("\nВведите IP адрес или имя компьютера (пр. 10.234.16.129, 'IT04', '630300IT04', 'R54-630300IT04'): ",
|
string remote = InputData("\nВведите IP адрес или имя компьютера (пр. 10.234.16.129, 'IT04', '630300IT04', 'R54-630300IT04'):",
|
||||||
StartRDPConnection);
|
StartRDPConnection);
|
||||||
|
|
||||||
if (!IsStringContainIp(remote))
|
if (!IsStringContainIp(remote))
|
||||||
@@ -310,17 +312,97 @@ namespace domain_utility
|
|||||||
BackToMenu(StartRDPConnection);
|
BackToMenu(StartRDPConnection);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static void ExecuteCommandViaSSH()
|
||||||
|
{
|
||||||
|
string remote = InputData("\nВведите IP адрес или имя компьютера (пр. 10.234.16.129, 'IT04', '630300IT04', 'R54-630300IT04'):",
|
||||||
|
ExecuteCommandViaSSH);
|
||||||
|
|
||||||
|
if (!IsStringContainIp(remote))
|
||||||
|
{
|
||||||
|
remote = СheckComputerName(remote);
|
||||||
|
if (remote == string.Empty)
|
||||||
|
{
|
||||||
|
Console.WriteLine("Имя компьютера или IP-адрес не распознаны! Попробуйте еще раз.");
|
||||||
|
BackToMenu(ExecuteCommandViaSSH);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Console.WriteLine("Введите пароль от СВОЕЙ учетной записи:");
|
||||||
|
Console.Write("> ");
|
||||||
|
string password = string.Empty;
|
||||||
|
while (true)
|
||||||
|
{
|
||||||
|
var key = Console.ReadKey(true);
|
||||||
|
if (key.Key == ConsoleKey.Enter)
|
||||||
|
break;
|
||||||
|
if (key.Key == ConsoleKey.Backspace && password.Length > 0)
|
||||||
|
password = password.Substring(0, password.Length - 1);
|
||||||
|
else if (key.Key != ConsoleKey.Backspace)
|
||||||
|
password += key.KeyChar;
|
||||||
|
}
|
||||||
|
Console.Write("\n\n");
|
||||||
|
|
||||||
|
string commandToExecute = InputData("Введите команду для выполнения:", ExecuteCommandViaSSH, false);
|
||||||
|
|
||||||
|
string machineNameAndUser = WindowsIdentity.GetCurrent().Name.ToString();
|
||||||
|
int indexOfUserName = machineNameAndUser.IndexOf('\\') + 1;
|
||||||
|
string machineUser = machineNameAndUser.Substring(indexOfUserName, machineNameAndUser.Length - indexOfUserName).ToLower();
|
||||||
|
|
||||||
|
using (var client = new SshClient(remote, machineUser, password))
|
||||||
|
{
|
||||||
|
client.Connect();
|
||||||
|
// "sudo sed -i 's/update_interval = 0.5,/update_interval = 300,/' /etc/conky/conky.conf"
|
||||||
|
SshCommand command = client.RunCommand(commandToExecute);
|
||||||
|
Console.WriteLine(command.Result);
|
||||||
|
client.Disconnect();
|
||||||
|
}
|
||||||
|
Console.WriteLine("Вроде что-то произошло, но это не точно");
|
||||||
|
|
||||||
|
BackToMenu(ExecuteCommandViaSSH);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void RemoteRebootWindows()
|
||||||
|
{
|
||||||
|
string remote = InputData("\nВведите IP адрес или имя компьютера (пр. 10.234.16.129, 'IT04', '630300IT04', 'R54-630300IT04'):",
|
||||||
|
RemoteRebootWindows);
|
||||||
|
|
||||||
|
if (!IsStringContainIp(remote))
|
||||||
|
{
|
||||||
|
remote = СheckComputerName(remote);
|
||||||
|
if (remote == string.Empty)
|
||||||
|
{
|
||||||
|
Console.WriteLine("Имя компьютера или IP-адрес не распознаны! Попробуйте еще раз.");
|
||||||
|
BackToMenu(RemoteRebootWindows);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
remote = $"/m \\\\{remote} /r /f /t 180 /c 'Через 3 минуты будет произведена перезагрузка ПК!'";
|
||||||
|
Process proc = new Process
|
||||||
|
{
|
||||||
|
StartInfo = new ProcessStartInfo("shutdown", remote)
|
||||||
|
};
|
||||||
|
proc.Start();
|
||||||
|
|
||||||
|
Console.WriteLine("Команда перезагрузки успешно отправлена!");
|
||||||
|
|
||||||
|
BackToMenu(RemoteRebootWindows);
|
||||||
|
}
|
||||||
|
|
||||||
private static void Menu()
|
private static void Menu()
|
||||||
{
|
{
|
||||||
Console.Clear();
|
Console.Clear();
|
||||||
string[] menuList = {
|
string[] menuList = {
|
||||||
|
//"4 - сброс пароля локального администратора (только Windows)",
|
||||||
"Выберите действие:",
|
"Выберите действие:",
|
||||||
"1 - посмотреть информацию о пользователе (только Windows)",
|
"1 - посмотреть информацию о пользователе (только Windows)",
|
||||||
"2 - посмотреть дату последней загрузки компьютера (только Windows)",
|
"2 - посмотреть дату последней загрузки компьютера (только Windows)",
|
||||||
"3 - ping компьютера",
|
"3 - ping компьютера",
|
||||||
//"4 - сброс пароля локального администратора (только Windows)",
|
|
||||||
"4 - открыть CUPS выбранного компьютера (только Linux)",
|
"4 - открыть CUPS выбранного компьютера (только Linux)",
|
||||||
"5 - удаленно подключиться к компьютеру (только Windows -> Windows, Windows -> Linux)"
|
"5 - удаленно подключиться к компьютеру (Windows -> Windows, Windows -> Linux)",
|
||||||
|
"6 - выполнить команду удаленно (только Windows -> Linux)",
|
||||||
|
"7 - удаленная перезагрузка компьютера (только Windows)",
|
||||||
};
|
};
|
||||||
for (int i = 0; i < menuList.Length; i++)
|
for (int i = 0; i < menuList.Length; i++)
|
||||||
Console.WriteLine(menuList[i]);
|
Console.WriteLine(menuList[i]);
|
||||||
@@ -334,6 +416,8 @@ namespace domain_utility
|
|||||||
case 3: StartPing(); break;
|
case 3: StartPing(); break;
|
||||||
case 4: OpenComputerCups(); break;
|
case 4: OpenComputerCups(); break;
|
||||||
case 5: StartRDPConnection(); break;
|
case 5: StartRDPConnection(); break;
|
||||||
|
case 6: ExecuteCommandViaSSH(); break;
|
||||||
|
case 7: RemoteRebootWindows(); break;
|
||||||
case 51422415: ResetAdminPassword(); break;
|
case 51422415: ResetAdminPassword(); break;
|
||||||
default:
|
default:
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
|
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
|
||||||
|
<Import Project="packages\ILRepack.Lib.MSBuild.Task.2.0.34.2\build\ILRepack.Lib.MSBuild.Task.targets" Condition="Exists('packages\ILRepack.Lib.MSBuild.Task.2.0.34.2\build\ILRepack.Lib.MSBuild.Task.targets')" />
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||||
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||||
@@ -12,6 +13,8 @@
|
|||||||
<FileAlignment>512</FileAlignment>
|
<FileAlignment>512</FileAlignment>
|
||||||
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
|
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
|
||||||
<Deterministic>true</Deterministic>
|
<Deterministic>true</Deterministic>
|
||||||
|
<NuGetPackageImportStamp>
|
||||||
|
</NuGetPackageImportStamp>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||||
<PlatformTarget>AnyCPU</PlatformTarget>
|
<PlatformTarget>AnyCPU</PlatformTarget>
|
||||||
@@ -33,10 +36,22 @@
|
|||||||
<WarningLevel>4</WarningLevel>
|
<WarningLevel>4</WarningLevel>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
<Reference Include="Microsoft.Bcl.AsyncInterfaces, Version=1.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
|
||||||
|
<HintPath>packages\Microsoft.Bcl.AsyncInterfaces.1.0.0\lib\net461\Microsoft.Bcl.AsyncInterfaces.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="Renci.SshNet, Version=2024.1.0.0, Culture=neutral, PublicKeyToken=1cee9f8bde3db106, processorArchitecture=MSIL">
|
||||||
|
<HintPath>packages\SSH.NET.2024.1.0\lib\net462\Renci.SshNet.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
<Reference Include="System" />
|
<Reference Include="System" />
|
||||||
<Reference Include="System.Core" />
|
<Reference Include="System.Core" />
|
||||||
<Reference Include="System.DirectoryServices" />
|
<Reference Include="System.DirectoryServices" />
|
||||||
<Reference Include="System.Management" />
|
<Reference Include="System.Management" />
|
||||||
|
<Reference Include="System.Runtime.CompilerServices.Unsafe, Version=4.0.4.1, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||||
|
<HintPath>packages\System.Runtime.CompilerServices.Unsafe.4.5.2\lib\netstandard2.0\System.Runtime.CompilerServices.Unsafe.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="System.Threading.Tasks.Extensions, Version=4.2.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
|
||||||
|
<HintPath>packages\System.Threading.Tasks.Extensions.4.5.2\lib\netstandard2.0\System.Threading.Tasks.Extensions.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
<Reference Include="System.Xml.Linq" />
|
<Reference Include="System.Xml.Linq" />
|
||||||
<Reference Include="System.Data.DataSetExtensions" />
|
<Reference Include="System.Data.DataSetExtensions" />
|
||||||
<Reference Include="Microsoft.CSharp" />
|
<Reference Include="Microsoft.CSharp" />
|
||||||
@@ -50,6 +65,35 @@
|
|||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<None Include="App.config" />
|
<None Include="App.config" />
|
||||||
|
<None Include="packages.config" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||||
|
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
|
||||||
|
<PropertyGroup>
|
||||||
|
<ErrorText>Данный проект ссылается на пакеты NuGet, отсутствующие на этом компьютере. Используйте восстановление пакетов NuGet, чтобы скачать их. Дополнительную информацию см. по адресу: http://go.microsoft.com/fwlink/?LinkID=322105. Отсутствует следующий файл: {0}.</ErrorText>
|
||||||
|
</PropertyGroup>
|
||||||
|
<Error Condition="!Exists('packages\ILRepack.Lib.MSBuild.Task.2.0.34.2\build\ILRepack.Lib.MSBuild.Task.targets')" Text="$([System.String]::Format('$(ErrorText)', 'packages\ILRepack.Lib.MSBuild.Task.2.0.34.2\build\ILRepack.Lib.MSBuild.Task.targets'))" />
|
||||||
|
</Target>
|
||||||
|
<!-- <Target Name="AfterBuild" Condition="'$(Configuration)' == 'Release'"> -->
|
||||||
|
<!-- <ItemGroup> -->
|
||||||
|
<!-- <InputAssemblies Include="$(OutputPath)\$(AssemblyName).exe" /> -->
|
||||||
|
<!-- <InputAssemblies Include="$(OutputPath)\Microsoft.Bcl.AsyncInterfaces.dll" /> -->
|
||||||
|
<!-- <InputAssemblies Include="$(OutputPath)\System.Threading.Tasks.Extensions.dll" /> -->
|
||||||
|
<!-- <InputAssemblies Include="$(OutputPath)\System.Runtime.CompilerServices.Unsafe.dll" /> -->
|
||||||
|
<!-- <InputAssemblies Include="$(OutputPath)\Renci.SshNet.dll" /> -->
|
||||||
|
<!-- <InputAssemblies Include="$(OutputPath)\*.dll" /> -->
|
||||||
|
<!-- </ItemGroup> -->
|
||||||
|
<!-- <ItemGroup> -->
|
||||||
|
<!-- Must be a fully qualified name -->
|
||||||
|
<!-- <DoNotInternalizeAssemblies Include="ExampleAssemblyToMerge3" /> -->
|
||||||
|
<!-- </ItemGroup> -->
|
||||||
|
<!-- InternalizeExclude="@(DoNotInternalizeAssemblies)" -->
|
||||||
|
<!-- <ILRepack -->
|
||||||
|
<!-- Parallel="true" -->
|
||||||
|
<!-- Internalize="true" -->
|
||||||
|
<!-- InputAssemblies="@(InputAssemblies)" -->
|
||||||
|
<!-- TargetKind="Exe" -->
|
||||||
|
<!-- OutputFile="$(OutputPath)\$(AssemblyName)_merged.exe" -->
|
||||||
|
<!-- /> -->
|
||||||
|
<!-- </Target> -->
|
||||||
</Project>
|
</Project>
|
||||||
8
packages.config
Normal file
8
packages.config
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<packages>
|
||||||
|
<package id="ILRepack.Lib.MSBuild.Task" version="2.0.34.2" targetFramework="net48" developmentDependency="true" />
|
||||||
|
<package id="Microsoft.Bcl.AsyncInterfaces" version="1.0.0" targetFramework="net48" />
|
||||||
|
<package id="SSH.NET" version="2024.1.0" targetFramework="net48" />
|
||||||
|
<package id="System.Runtime.CompilerServices.Unsafe" version="4.5.2" targetFramework="net48" />
|
||||||
|
<package id="System.Threading.Tasks.Extensions" version="4.5.2" targetFramework="net48" />
|
||||||
|
</packages>
|
||||||
Reference in New Issue
Block a user