-
Оно находится в нижнем левом углу.
-
-
Отобразится список компьютеров, которые подключены к сети.
-
Дважды щелкните по компьютеру, на котором хотите просмотреть общие папки. Отобразится список общих папок на выбранном компьютере.
Реклама
-
Откроется панель поиска Windows.
-
Появится список результатов поиска.
-
-
Вы найдете эту опцию в левом столбце.[1]
Откроется список подпапок. -
Отобразится список общих папок.
Реклама
-
Оно находится в нижнем левом углу.
-
Откроется окно командной строки.
-
Для этого щелкните внутри окна командной строки, а затем введите указанную команду.[2]
-
Отобразится список общих папок.
Реклама
Об этой статье
Эту страницу просматривали 1523 раза.
Была ли эта статья полезной?
In all the editions of Windows, it is very simple to share files and folders, however, things can be risky if you don’t know exactly what are the files and folders that you are sharing to your network from your computer. If the permissions of the folders are not set properly, the users connected to the same network as you are could weaken the security of your shared folders. And hence, it is very important for you to know exactly what folders are exactly shared by you on the network. We will present you a few ways through which you can View All Shared Folders in Network Windows 10 and manage their security.
How to View All Shared Folders in Network Windows 10
First Way: Using File Explorer
The easiest procedure to View All Shared Folders in Network Windows 10, is from the File Explorer. So you need to launch your File Explorer on your screen. Then in the navigation pane go to the Network and after that choose your computer’s name. Now, you will view the list will all the shared folders of your computer with the network.
But there is a small loophole here. You will not be able to see the hidden shares and also, it doesn’t provide you sufficient information about the way how all the folders are shared. To retrieve the detailed information you can perform right click and choose its Properties. On the Properties window of the selected folder, you can see extra information about how the particular selected folder is shared. Though it works but it is not the best one that the advanced users want to see. Nothing to worry, you have other ways to see the detailed information.
Alternatively, you can click on the Home menu and then on the Ribbon Bar hit the Properties button. This also brings the Properties window of the selected folder.
Second Way: Using Computer Management
Another method is viewing it from the Computer Management. We have talked about Computer Management recently and there are a couple of ways to access it. You can see the entire article on the following link:
So after arriving in the Computer Management window, navigate System Tools / Shared Folders / Shares which is in the left column of the Computer Management. So when you click the Shares in the left column, the center area will display you the list of shared folders and partitions on your computer. Now, here is the place where you will View All Shared Folders in Network Windows 10 and also the default shares of folders of Windows. The default shares are like C$ and D$.
You can also view the default administration shares of Windows here, ADMIN$.
The official share name of each of the shared partition and folder along with the original folder path, then the sort of the share, the various connections performed by the network to the shared folder with a brief description (if there are any present) are all can be viewed here.
To control the different parameters of the shared folder, double hit on the folder and from the arrived Properties window, you can modify the settings.
Coming to the left column of the Computer Management, click on the Session which is just after the Shares. Then on the central area of the Computer Management window shows the list of those users who are connected to the network shares at present.
When you choose the Open Files link, you will see all the files and folders that users are currently using.
Third Way: Using Windows 10 Command Prompt
You can also view the list of shared folder on the network using the Command Prompt. Launch Command Prompt on your screen and type net share. On the Command Prompt window, you will see a list of shared folders on your computer.
The End
With the three easy procedures, you can View All Shared Folders in Network Windows 10 computers. If you wish to see the basic details of the shared folders you can view them using the File Explorer. But to go to the detailed information about the shared folders of your network you can access them from the Computer Management. If you face any problem we will try to resolve it for you. Please use the comments section for the same.
Расшаренные папки (или папки с общим доступом) – это удобный инструмент для обмена файлами внутри локальной сети. Такие общие ресурсы используются как на предприятиях, так и в домашних сетях. Например, вы можете открыть общий доступ к папке на настольном компьютере и получить к ней доступ со своего ноутбука или мультимедийной приставки.
Но, при активном использовании расшаренных папок бывает сложно вспомнить, к чему был открыт общий доступ и где это находятся на компьютере. В данной небольшой статье мы рассмотрим именно этот вопрос и расскажем, как быстро найти все расшаренные папки на компьютере с Windows 10 или Windows 7.
Содержание
Просмотр расшаренных папок в окне «Мой компьютер»
Если вы хотите узнать, какие папки расшарены на вашем компьютере, то вы можете просто получить доступ к своему собственному компьютеру по сети, использовав имя компьютера «localhost» или IP-адрес «127.0.0.1».
Для этого откройте окно «Мой компьютер» и введите в адресную строку одну из следующих команд:
\\localhost \\127.0.0.1
На скриншоте внизу показано, куда нужно вводить команду.
После ввода данного адреса нажмите на клавишу Enter и перед вами появится список всех папок с общим доступом на этом компьютере. В нашем случае это папки FOTO, INFO и Users.
Прямо отсюда можно отключить общий доступ для любой из папок. Для этого нужно кликнуть правой кнопкой мышки по папке, открыть «Свойства», перейти на вкладку «Доступ» и нажать на кнопку «Расширенная настройка». В результате появится небольшое окно с настройками общего доступа.
Просмотр расшаренных папок в командной строке
Кроме этого, вы можете посмотреть список общих папок на локальном компьютере с помощью командной строки.
Для этого нужно запустить командную строку и выполнить одну из следующих команд:
net share net view \\localhost net view \\127.0.0.1
Просмотр расшареных папок через «Управление компьютером»
Также вы можете найти все расшаренные папки через инструмент «Управление компьютером». Для этого нужно нажать комбинацию клавиш Win-R и ввести команду «compmgmt.msc» либо ввести фразу «Управление компьютером» в поиск в меню «Пуск».
В окне «Управление компьютером» нужно открыть раздел «Служебные программы – Общие папки – Общие ресурсы». Здесь будет отображаться список всех папок, к которым открыт общий доступ на вашем компьютере.
Обратите внимание, общие папки со знаком доллара ($) в конце являются скрытыми и по умолчанию не отображаются при просмотре общих ресурсов. Эти папки были открыты операционной системой по умолчанию и доступ к ним есть только у локального администратора. Эти общие скрытые ресурсы не рекомендуется отключать, так как это может вызвать проблемы при работе с локальной сетью.
Посмотрите также:
- Как расшарить папку в Windows 7
- Схема обжима витой пары
- Как узнать какая сетевая карта стоит на компьютере
- Как узнать MAC адрес компьютера на Windows 10
- Как подключить сетевой диск в Windows 10
Автор
Александр Степушин
Создатель сайта comp-security.net, автор более 2000 статей о ремонте компьютеров, работе с программами, настройке операционных систем.
Остались вопросы?
Задайте вопрос в комментариях под статьей или на странице
«Задать вопрос»
и вы обязательно получите ответ.
Поиск открытых сетевых ресурсов и их права доступа
Уровень сложностиСредний
Время на прочтение16 мин
Количество просмотров5.2K
Общие сетевые ресурсы в домене Active Directory используются для упрощения и централизации доступа к файлам, папкам, принтерам и другим ресурсам в корпоративной сети. Это может привести к нарушению одной из основ информационной безопасности – конфиденциальности
Специалистам по информационной безопасности необходимо выполнять сканирование общих сетевых папок в домене по данным причинам:
-
Обнаружение и мониторинг угроз
Сканирование папок позволяет выявлять несанкционированный доступ к данным и файлам. Это помогает рано обнаруживать потенциальные угрозы безопасности и предотвращать утечку чувствительных информационных ресурсов.
-
Контроль доступа
Сканирование может помочь определить, кто имеет доступ к данным и файлам. Это позволяет специалистам по информационной безопасности убедиться, что только сотрудники с соответствующими правами имеют доступ к конфиденциальной информации.
-
Соблюдение нормативов
Множество отраслевых и государственных регуляторов требуют соблюдения нормативов по защите данных и конфиденциальности. Сканирование помогает удостовериться, что организация соблюдает требования по уровню доступа и контролю к данным.
-
Аудит безопасности
Сканирование общих сетевых папок может быть включено в процессы аудита безопасности, позволяя проводить оценку уровня безопасности и выявлять потенциальные слабые места.
-
Аудит безопасности
Сканирование общих сетевых папок может быть включено в процессы аудита безопасности, позволяя проводить оценку уровня безопасности и выявлять потенциальные слабые места.
Текущие продукты по поиску открытых сетевых ресурсов
На просторах сети есть подобные программы, которые обладают куда большим функционалом, чем я планирую описать.
Как пример программа «SoftPerfect Network Scanner»
Или такая программа как «advanced ip scanner»
Данные программы позволяют сканировать подсети внутри компании и выдавать информацию по поводу открытых сетевых папок, и даже какие файлы там содержатся.
Также можно воспользоваться встроенными средствами Windows для поиска и просмотра открытых сетевых ресурсов на том же файловом сервере. И напрашивается вопрос — а зачем что-то изобретать по новому?
Ответ — не знаю, просто захотелось попробовать что-то свое сделать.
Описание работы программы
Изначально я попробовал сделать все только на PowerShell, сделать скрипт, затем батник, но решил, что это как-то просто.
Скрипт выглядит следующим образом:
# Установка английского языка для корректной работы
$prevCulture = [System.Threading.Thread]::CurrentThread.CurrentCulture
[System.Threading.Thread]::CurrentThread.CurrentThread.CurrentCulture = 'en-US'
# Получаем IP машины
$ipAddress = (Test-Connection -ComputerName $env:COMPUTERNAME -Count 1).IPV4Address.IPAddressToString
# Получаем имя компьютера
$computerName = $env:COMPUTERNAME
# Генерируем рандомное число
$randomNumber = Get-Random -Minimum 1 -Maximum 10000
# Создадим локальный файл в Temp
$localFolderPath = "C:\\Temp"
$fileName = "$($randomNumber)_$($ipAddress)_$($computerName)_$(Get-Date -Format 'yyyy-MM-dd_HH-mm-ss').txt"
$localFilePath = "$localFolderPath\$fileName"
# Отладочная информация
Write-Host "File will be created at $localFilePath"
# Функция для получения прав доступа и замена на читабельные данные
function Get-AccessRights {
param($path)
$accessRights = & icacls $path | Out-String
$accessRights = $accessRights -replace '\(OI\)', '/Owner' # Owner object
$accessRights = $accessRights -replace '\(CI\)', '/Container' # Container
$accessRights = $accessRights -replace '\(F\)', '/Full access' # Full access
accessRights = $accessRights -replace '\(RX\)', '/Read and execute' # Read and execute
return $accessRights
}
# Получаем список общих сетевых папок на текущем компьютере
$networkFolders = Get-WmiObject -Class Win32_Share | Where-Object { $_.Path -ne $null -and $_.Type -eq 0 }
# Если есть открытые сетевые папки, записываем информацию в файл
if ($networkFolders) {
$outputData = @()
$outputData += "$ipAddress \ $computerName \ `"Number of open folders:`" $($networkFolders.Count)"
$outputData += "Path to folders:"
foreach ($folder in $networkFolders) {
folderPath = $folder.Path
$outputData += "$folderPath"
# Получаем информацию о правах доступа и сам процесс для записи в файл
$accessRights = Get-AccessRights -path $folderPath
$outputData += $accessRights
}
$outputData | Out-File -FilePath $localFilePath -Encoding UTF8
} else {
# Если открытых сетевых папок нет, выводим сообщение об этом
IP Address: $ipAddress `nComputer Name: $computerName `nNetwork folders not found." | Out-File -FilePath $localFilePath -Encoding UTF8
}
# Выводим сообщение об успешном выполнении задачи
Write-Host "Information gathered and saved to $localFilePath."
# Восстановить предыдущую настройку кодировки
[System.Threading.Thread]::CurrentThread.CurrentCulture = $prevCulture
Данный скрипт создает в папке C:\Temp файл с результатами и присваивает ему случайно сгенерированный номер, для дальнейшего поиска.
Для локального запуска можно заменить строку на какой-нибудь другой путь:
# Создадим локальный файл в Temp
$localFolderPath = "C:\\Temp"
Но стоит вопрос централизованной проверки. То есть с одного компьютера или сервера можно сразу запустить на всех устройствах данный скрипт.
Поэтому я решил написать программу на Python для непосредственного использования на компьютера ( и все усложнить в 1000 раз)
import subprocess
import os
import datetime
import shutil
import re
import tkinter as tk
from tkinter import messagebox, scrolledtext
# Функция для обновления лога в текстовом окне
def log_message(log_window, message):
log_window.insert(tk.END, message + '\n')
log_window.see(tk.END)
log_window.update_idletasks()
# Функция для отображения окна с сообщением об ошибке
def show_error_message(error_message):
messagebox.showerror("Error", error_message)
# Функция для отображения окна с успешным сообщением
def show_success_message(file_path, file_name):
messagebox.showinfo("Success", f"File created successfully!\n\nFile name: {file_name}\nNetwork path: {file_path}")
# Основной код программы
def main_program(log_window):
try:
# Путь к сетевой папке и учетные данные (замените на реальные данные в рабочей среде)
network_folder_path = r'\\путь\' # Замените на реальный сетевой путь
username = 'логин' # Замените на реальное имя пользователя домена
password = 'пароль' # Замените на реальный пароль
# Логирование подключения к сетевой папке
log_message(log_window, "Attempting to disconnect old network connection...")
disconnect_command = f"net use {network_folder_path} /delete"
subprocess.run(disconnect_command, shell=True)
log_message(log_window, "Attempting to connect to network folder...")
net_use_command = f"net use {network_folder_path} /user:{username} {password}"
result = subprocess.run(net_use_command, shell=True, capture_output=True, text=True, encoding='cp866')
if result.returncode == 0:
log_message(log_window, f"Successfully connected to the network folder: {network_folder_path}")
else:
error_message = result.stderr
raise Exception(f"Error connecting to the network folder: {error_message}")
# Генерация текущей даты и времени для именования файлов
current_datetime = datetime.datetime.now().strftime('%Y-%m-%d_%H-%M-%S')
# Путь к временному скрипту PowerShell (используем C:\Temp для избежания ошибок доступа)
temp_dir = "C:\\Temp"
if not os.path.exists(temp_dir):
os.makedirs(temp_dir)
ps_script_path = os.path.join(temp_dir, 'temp_script.ps1')
# Логирование создания скрипта
log_message(log_window, "Creating PowerShell script...")
# Содержимое скрипта PowerShell для сбора данных
ps_script_content = r'''
# Установка культуры на английский для корректной работы
$prevCulture = [System.Threading.Thread]::CurrentThread.CurrentCulture
[System.Threading.Thread]::CurrentThread.CurrentThread.CurrentCulture = 'en-US'
# получаем IP машины
$ipAddress = (Test-Connection -ComputerName $env:COMPUTERNAME -Count 1).IPV4Address.IPAddressToString
# получаем имя компьютера
$computerName = $env:COMPUTERNAME
# генерируем рандомное число
$randomNumber = Get-Random -Minimum 1 -Maximum 10000
# Создадим локальный файл в Temp
$localFolderPath = "C:\\Temp"
$fileName = "$($randomNumber)_$($ipAddress)_$($computerName)_$(Get-Date -Format 'yyyy-MM-dd_HH-mm-ss').txt"
$localFilePath = "$localFolderPath\$fileName"
# Отладочная информация
Write-Host "File will be created at $localFilePath"
# функция для получения прав доступа и замена на читабельные данные
function Get-AccessRights {
param($path)
$accessRights = & icacls $path | Out-String
$accessRights = $accessRights -replace '\(OI\)', '/Owner' # Owner object
$accessRights = $accessRights -replace '\(CI\)', '/Container' # Container
$accessRights = $accessRights -replace '\(F\)', '/Full access' # Full access
$accessRights = $accessRights -replace '\(RX\)', '/Read and execute' # Read and execute
return $accessRights
}
# Получаем список общих сетевых папок на текущем компьютере
$networkFolders = Get-WmiObject -Class Win32_Share | Where-Object { $_.Path -ne $null -and $_.Type -eq 0 }
# Если есть открытые сетевые папки, записываем информацию в файл
if ($networkFolders) {
$outputData = @()
$outputData += "$ipAddress \ $computerName \ `"Number of open folders:`" $($networkFolders.Count)"
$outputData += "Path to folders:"
foreach ($folder in $networkFolders) {
$folderPath = $folder.Path
$outputData += "$folderPath"
# Получаем информацию о правах доступа и сам процесс для записи в файл
$accessRights = Get-AccessRights -path $folderPath
$outputData += $accessRights
}
$outputData | Out-File -FilePath $localFilePath -Encoding UTF8
} else {
# Если открытых сетевых папок нет, выводим сообщение об этом
"IP Address: $ipAddress `nComputer Name: $computerName `nNetwork folders not found." | Out-File -FilePath $localFilePath -Encoding UTF8
}
# Выводим сообщение об успешном выполнении задачи
Write-Host "Information gathered and saved to $localFilePath."
# Восстановить предыдущую настройку кодировки
[System.Threading.Thread]::CurrentThread.CurrentCulture = $prevCulture
'''
# Запись содержимого PowerShell скрипта во временный файл
with open(ps_script_path, 'w', encoding='utf-8') as f:
f.write(ps_script_content)
log_message(log_window, "PowerShell script created. Executing script...")
# Команда для выполнения скрипта PowerShell
ps_command = f'powershell.exe -ExecutionPolicy Bypass -File "{ps_script_path}"'
result = subprocess.run(ps_command, shell=True, capture_output=True, text=True)
if result.returncode == 0:
log_message(log_window, "PowerShell script executed successfully.")
log_message(log_window, result.stdout)
# Поиск случайного числа в выводе PowerShell
match = re.search(r'(\d+)', result.stdout)
if match:
random_number = int(match.group())
log_message(log_window, f"Random number generated by PowerShell: {random_number}")
# Проверяем, создался ли файл локально
log_message(log_window, "Checking local Temp folder for the created file...")
local_files = os.listdir(temp_dir)
found_file = None
for file_name in local_files:
if file_name.startswith(str(random_number)):
found_file = file_name
break
if found_file:
local_file_path = os.path.join(temp_dir, found_file)
log_message(log_window, f"File created locally: {local_file_path}")
# Копируем файл в сетевую папку
log_message(log_window, f"Copying file to network folder: {network_folder_path}")
shutil.copy(local_file_path, network_folder_path)
# Проверка файла в сетевой папке
log_message(log_window, "Searching for the file in the network folder...")
files_in_network_folder = os.listdir(network_folder_path)
network_found_file = None
for file_name in files_in_network_folder:
if file_name.startswith(str(random_number)):
network_found_file = file_name
break
if network_found_file:
full_file_path = os.path.join(network_folder_path, network_found_file)
log_message(log_window, f"Found file: {full_file_path}")
# Чтение файла и анализ содержимого
with open(full_file_path, 'r', encoding='utf-8') as output_file:
output_data = output_file.read()
# Лог содержимого файла для отладки
log_message(log_window, f"File content:\n{output_data}")
# Установка префикса в зависимости от содержимого файла
new_prefix = "Empty_" # По умолчанию "Empty_"
if "Number of open folders:" in output_data:
open_folders_count = int(re.search(r'\d+', output_data).group())
log_message(log_window, f"Open folders count: {open_folders_count}")
if open_folders_count > 0:
# Проверяем наличие прав, связанных с "Everyone", "Все" или "All"
if re.search(r'(Everyone|Все|All)([:/\\])', output_data):
new_prefix = "Нарушение_"
log_message(log_window, "Violation detected based on folder permissions.")
else:
new_prefix = "OpenShareFind_"
log_message(log_window, "Open folders found, but no violations.")
else:
log_message(log_window, "No open folders found, setting prefix to 'Empty_'.")
# Переименование файла
new_filename = f"{new_prefix}{network_found_file}"
new_file_path = os.path.join(network_folder_path, new_filename)
os.rename(full_file_path, new_file_path)
log_message(log_window, f"File renamed to: {new_file_path}")
# Выводим сообщение об успешном создании файла
show_success_message(network_folder_path, new_filename)
else:
raise Exception("File not found in the network folder.")
else:
raise Exception("File not found in local Temp folder.")
else:
raise Exception("Random number not found in PowerShell output.")
else:
raise Exception(f"Error executing PowerShell script: {result.stderr}")
except Exception as e:
show_error_message(str(e))
# Функция для запуска программы с интерфейсом
def run_gui():
root = tk.Tk()
root.title("Network File Creation Tool")
# Окно для вывода лога
log_window = scrolledtext.ScrolledText(root, wrap=tk.WORD, width=100, height=30)
log_window.pack(padx=10, pady=10)
# Запуск программы в отдельном потоке
root.after(100, lambda: main_program(log_window))
root.mainloop()
# Запуск программы
run_gui()
Данный код сделан специально с отладкой, чтобы можно было сразу понять где появляется ошибка при подключении или другие ошибки.
Логика работы данной программы:
-
Подключение к сетевой папке:
-
Попытка отключения предыдущих подключений с помощью команды
net use /delete
. -
Попытка подключения к сетевой папке с использованием указанных учетных данных.
-
-
Создание временного PowerShell скрипта:
-
Генерация текущей даты и времени для именования файлов.
-
Создание временного каталога
C:\Temp
(если он не существует). -
Запись PowerShell скрипта во временный файл.
-
-
Выполнение PowerShell скрипта:
-
Сбор информации о сетевых папках и правах доступа.
-
Запись информации в файл.
-
-
Проверка и работа с файлом:
-
Поиск файла, созданного PowerShell скриптом в локальной папке
C:\Temp
. -
Копирование файла в сетевую папку.
-
Проверка содержимого файла и переименование файла на основе анализа прав доступа и наличия открытых папок.
-
-
Завершение и обработка ошибок:
-
Отображение сообщений об успехе или ошибках.
-
Для работы данной программы так же необходимо:
-
Создать учетную запись с правами администратора, которая будет вшита в данную программу ( нужно так же понимать, что для данной УЗ необходимо сделать ограничения на работу, кроме тех, которые выполняются в ходе работы программы).
-
Создать на сервере папку и расшарить доступ к ней для данной УЗ, Так же для данной папки необходимо сделать разрешения на чтение\запись.
Код программы без отладочных механизмов:
import subprocess
import os
import datetime
import shutil
import re
import tkinter as tk
from tkinter import messagebox, scrolledtext
# Функция для обновления лога в текстовом окне
def log_message(log_window, message):
log_window.insert(tk.END, message + '\n')
log_window.see(tk.END)
log_window.update_idletasks()
# Функция для отображения окна с сообщением об ошибке
def show_error_message(error_message):
messagebox.showerror("Error", error_message)
# Функция для отображения окна с успешным сообщением
def show_success_message(file_path, file_name):
messagebox.showinfo("Success", f"File created successfully!\n\nFile name: {file_name}\nNetwork path: {file_path}")
# Основной код программы
#def main_program(log_window):
def main_program():
try:
# Путь к сетевой папке и учетные данные (замените на реальные данные в рабочей среде)
network_folder_path = r'\\DESKTOP-N391HHM\Users\warde\Desktop\test' # Замените на реальный сетевой путь
username = 'admin' # Замените на реальное имя пользователя домена
password = 'password' # Замените на реальный пароль
# Логирование подключения к сетевой папке
#log_message(log_window, "Attempting to disconnect old network connection...")
disconnect_command = f"net use {network_folder_path} /delete"
subprocess.run(disconnect_command, shell=True)
#log_message(log_window, "Attempting to connect to network folder...")
net_use_command = f"net use {network_folder_path} /user:{username} {password}"
result = subprocess.run(net_use_command, shell=True, capture_output=True, text=True, encoding='cp866')
if result.returncode == 0:
#log_message(log_window, f"Successfully connected to the network folder: {network_folder_path}")
pass
else:
error_message = result.stderr
raise Exception(f"Error connecting to the network folder: {error_message}")
# Генерация текущей даты и времени для именования файлов
current_datetime = datetime.datetime.now().strftime('%Y-%m-%d_%H-%M-%S')
# Путь к временному скрипту PowerShell (используем C:\Temp для избежания ошибок доступа)
temp_dir = "C:\\Temp"
if not os.path.exists(temp_dir):
os.makedirs(temp_dir)
ps_script_path = os.path.join(temp_dir, 'temp_script.ps1')
# Логирование создания скрипта
#log_message(log_window, "Creating PowerShell script...")
# Содержимое скрипта PowerShell для сбора данных
ps_script_content = r'''
# Установка культуры на английский для корректной работы
$prevCulture = [System.Threading.Thread]::CurrentThread.CurrentCulture
[System.Threading.Thread]::CurrentThread.CurrentThread.CurrentCulture = 'en-US'
# получаем IP машины
$ipAddress = (Test-Connection -ComputerName $env:COMPUTERNAME -Count 1).IPV4Address.IPAddressToString
# получаем имя компьютера
$computerName = $env:COMPUTERNAME
# генерируем рандомное число
$randomNumber = Get-Random -Minimum 1 -Maximum 10000
# Создадим локальный файл в Temp
$localFolderPath = "C:\\Temp"
$fileName = "$($randomNumber)_$($ipAddress)_$($computerName)_$(Get-Date -Format 'yyyy-MM-dd_HH-mm-ss').txt"
$localFilePath = "$localFolderPath\$fileName"
# Отладочная информация
Write-Host "File will be created at $localFilePath"
# функция для получения прав доступа и замена на читабельные данные
function Get-AccessRights {
param($path)
$accessRights = & icacls $path | Out-String
$accessRights = $accessRights -replace '\(OI\)', '/Owner' # Owner object
$accessRights = $accessRights -replace '\(CI\)', '/Container' # Container
$accessRights = $accessRights -replace '\(F\)', '/Full access' # Full access
$accessRights = $accessRights -replace '\(RX\)', '/Read and execute' # Read and execute
return $accessRights
}
# Получаем список общих сетевых папок на текущем компьютере
$networkFolders = Get-WmiObject -Class Win32_Share | Where-Object { $_.Path -ne $null -and $_.Type -eq 0 }
# Если есть открытые сетевые папки, записываем информацию в файл
if ($networkFolders) {
$outputData = @()
$outputData += "$ipAddress \ $computerName \ `"Number of open folders:`" $($networkFolders.Count)"
$outputData += "Path to folders:"
foreach ($folder in $networkFolders) {
$folderPath = $folder.Path
$outputData += "$folderPath"
# Получаем информацию о правах доступа и сам процесс для записи в файл
$accessRights = Get-AccessRights -path $folderPath
$outputData += $accessRights
}
$outputData | Out-File -FilePath $localFilePath -Encoding UTF8
} else {
# Если открытых сетевых папок нет, выводим сообщение об этом
"IP Address: $ipAddress `nComputer Name: $computerName `nNetwork folders not found." | Out-File -FilePath $localFilePath -Encoding UTF8
}
# Выводим сообщение об успешном выполнении задачи
Write-Host "Information gathered and saved to $localFilePath."
# Восстановить предыдущую настройку кодировки
[System.Threading.Thread]::CurrentThread.CurrentCulture = $prevCulture
'''
# Запись содержимого PowerShell скрипта во временный файл
with open(ps_script_path, 'w', encoding='utf-8') as f:
f.write(ps_script_content)
#log_message(log_window, "PowerShell script created. Executing script...")
# Команда для выполнения скрипта PowerShell
ps_command = f'powershell.exe -ExecutionPolicy Bypass -File "{ps_script_path}"'
result = subprocess.run(ps_command, shell=True, capture_output=True, text=True)
if result.returncode == 0:
#log_message(log_window, "PowerShell script executed successfully.")
#log_message(log_window, result.stdout)
# Поиск случайного числа в выводе PowerShell
match = re.search(r'(\d+)', result.stdout)
if match:
random_number = int(match.group())
#log_message(log_window, f"Random number generated by PowerShell: {random_number}")
# Проверяем, создался ли файл локально
#log_message(log_window, "Checking local Temp folder for the created file...")
local_files = os.listdir(temp_dir)
found_file = None
for file_name in local_files:
if file_name.startswith(str(random_number)):
found_file = file_name
break
if found_file:
local_file_path = os.path.join(temp_dir, found_file)
#log_message(log_window, f"File created locally: {local_file_path}")
# Копируем файл в сетевую папку
#log_message(log_window, f"Copying file to network folder: {network_folder_path}")
shutil.copy(local_file_path, network_folder_path)
# Проверка файла в сетевой папке
#log_message(log_window, "Searching for the file in the network folder...")
files_in_network_folder = os.listdir(network_folder_path)
network_found_file = None
for file_name in files_in_network_folder:
if file_name.startswith(str(random_number)):
network_found_file = file_name
break
if network_found_file:
full_file_path = os.path.join(network_folder_path, network_found_file)
#log_message(log_window, f"Found file: {full_file_path}")
# Чтение файла и анализ содержимого
with open(full_file_path, 'r', encoding='utf-8') as output_file:
output_data = output_file.read()
# Лог содержимого файла для отладки
#log_message(log_window, f"File content:\n{output_data}")
# Установка префикса в зависимости от содержимого файла
new_prefix = "Empty_" # По умолчанию "Empty_"
if "Number of open folders:" in output_data:
open_folders_count = int(re.search(r'\d+', output_data).group())
#log_message(log_window, f"Open folders count: {open_folders_count}")
if open_folders_count > 0:
# Проверяем наличие прав, связанных с "Everyone", "Все" или "All"
if re.search(r'(Everyone|Все|All)([:/\\])', output_data):
new_prefix = "Нарушение_"
#log_message(log_window, "Violation detected based on folder permissions.")
else:
new_prefix = "OpenShareFind_"
#log_message(log_window, "Open folders found, but no violations.")
else:
#log_message(log_window, "No open folders found, setting prefix to 'Empty_'.")
pass
# Переименование файла
new_filename = f"{new_prefix}{network_found_file}"
new_file_path = os.path.join(network_folder_path, new_filename)
os.rename(full_file_path, new_file_path)
#log_message(log_window, f"File renamed to: {new_file_path}")
# Выводим сообщение об успешном создании файла
#show_success_message(network_folder_path, new_filename)
else:
raise Exception("File not found in the network folder.")
else:
raise Exception("File not found in local Temp folder.")
else:
raise Exception("Random number not found in PowerShell output.")
else:
raise Exception(f"Error executing PowerShell script: {result.stderr}")
except Exception as e:
show_error_message(str(e))
# Функция для запуска программы с интерфейсом
#def run_gui():
#root = tk.Tk()
#root.title("Network File Creation Tool")
# Окно для вывода лога
#log_window = scrolledtext.ScrolledText(root, wrap=tk.WORD, width=100, height=30)
#log_window.pack(padx=10, pady=10)
# Запуск программы в отдельном потоке
#root.after(100, lambda: main_program(log_window))
#root.after(100, lambda: main_program())
#root.mainloop()
# Запуск программы
#run_gui()
main_program()
Логика дополнительного усложнения
Зачем просматривать каждый файл с информацией, когда можно этого не делать? Именно поэтому я внедрил механизм переименовки файлов в зависимости от их содержимого. Это все регулируется в данном блоке и при желании можно отредактировать его:
# Установка префикса в зависимости от содержимого файла
new_prefix = "Empty_" # По умолчанию "Empty_"
if "Number of open folders:" in output_data:
open_folders_count = int(re.search(r'\d+', output_data).group())
#log_message(log_window, f"Open folders count: {open_folders_count}")
if open_folders_count > 0:
# Проверяем наличие прав, связанных с "Everyone", "Все" или "All"
if re.search(r'(Everyone|Все|All)([:/\\])', output_data):
new_prefix = "Нарушение_"
#log_message(log_window, "Violation detected based on folder permissions.")
else:
new_prefix = "OpenShareFind_"
#log_message(log_window, "Open folders found, but no violations.")
В данном случае есть три варианта: Нарушение, открытая шара найдена и пусто. Нарушение ставится в случае, если найдена открытая шара, и есть доступ для всех.
К вопросу о том, зачем генерировать случайное число: Для функции переименовки файла программа должна найти файл, с которым надо работать, поэтому этот механизма как некий идентификатор для дальнейшей работы.
Для непосредственного удаленного запуска можно использовать как и встроенные средства в АД, так и Kaspersky Endpoint Security.
Заключение
Данная программа позволяет централизовано собирать данные по открытым сетевым ресурсам в компании. Да, есть программы куда лучше, куда функциональнее, но в данном случае захотелось попробовать сделать подобное с другим подходом, сделать централизованный сбор информации, вместо того, чтоб сидеть сканировать пул IP-адресов и ждать.
Надеюсь кому-нибудь пригодятся данные наработки в своей работе.
Для предоставления общего доступа к файлу нужно, чтобы все компьютеры были подключены к одной и той же сети. Windows предлагает два варианта открытия доступа — обычный и расширенный, а также функцию «Домашняя группа». Все это немного сбивает с толку. Мы расскажем об обычном общем доступе, так как он более унифицирован для разных версий операционной системы.
В качестве протокола прикладного уровня для удаленного доступа используется SMB (Server Message Block — блок сообщений сервера), который основан на надежном TCP-соединении и инфраструктуре IP.
Открытие общего доступа
Щелкните правой кнопкой мыши по папке, доступ к которой нужно открыть, и выберите «Свойства | Доступ | Общий доступ». В следующем диалоговом окне «Доступ к сети» установите разрешения для выбранных пользователей.
Для второго шага уже определен пользователь папки «Владелец». Если вы теперь щелкните «Поделиться», то для доступа извне нужно будет вводить имя пользователя и пароль владельца. Проще открыть доступ пользователям с других компьютеров, выбрав в поле с именем пользователя «Все», нажав «Добавить» и установив параметр «Уровень разрешений: Чтение».
Разрешение только на чтение папок в большинстве случаев является лучшим вариантом, иначе существует вероятность случайного удаления или перезаписи файлов с другого компьютера. Если же нужно записать файлы на все ПК в сети, создайте на каждом из них новую папку «Входящие» или с аналогичным названием и откройте ее для общего доступа для пользователей «Все» с уровнем разрешений «Чтение и запись». Теперь можно копировать и перемещать файлы на самом ПК в нужное место.
Открытие общих файлов
Чтобы с другого компьютера домашней сети («клиента») открыть общие файлы, хранящиеся на ПК, где разрешен доступ к общим ресурсам («сервер»), запустите Проводник Windows и перейдите в раздел «Сеть». В результате короткого поиска в нем должно появиться имя сервера. В противном случае введите в адресную строку Проводника два обратных слеша и его имя — например, «\\ИМЯКОМПЬЮТЕРА».
В зависимости от настроек от вас может потребоваться ввести логин и пароль к учетной записи пользователя на сервере или общие файлы отобразятся сразу же, и вам нужно будет в зависимости от предоставленных разрешений при открытии ввести данные для входа. Можно установить флажок, чтобы сохранить данные для входа. Чтобы в дальнейшем быстрее открывать общие файлы, можно создать ярлык папки на Рабочем столе или закрепить его на Панели быстрого доступа.
Подключение сетевого диска
На клиенте легко можно подключить внешний общий ресурс как локальный диск с буквой, чтобы, например, надолго установить общую коллекцию музыки источником мультимедиа для программы-проигрывателя. В Проводнике правой кнопкой мыши щелкните по общему ресурсу и выберите «Подключить сетевой диск…».
Опция «Восстанавливать подключение при входе в систему» полезна, если сервер работает большую часть времени. Если общие файлы нужны только периодически на некоторое время (например, чтобы время от времени создавать резервные копии для ноутбука), можно с помощью текстового редактора написать небольшой скрипт, сохранить его как пакетный файл CMD и при необходимости запускать его двойным щелчком.
В нашем примере мы подключаем диск Z: к общей папке «Screenshots» на сервере «DEEPTHOUGHT» и запускаем окно Проводника с диском. Нажатие любой клавиши в окне пакетного файла приводит к отключению сетевого диска (при необходимости нужно подтвердить нажатием клавиши «J»), следующее нажатие на кнопку закрывает окно.
Чтобы отобразить список всех общих файлов на вашем компьютере, из стартового меню в «Средствах администрирования Windows» запустите «Управление компьютером» и выберите «Общие папки | Общие ресурсы». В целях безопасности отключите общий доступ к файлам, которые больше не используются. Самый быстрый способ — щелкнуть в окне управления компьютером правой кнопкой по ресурсу.
Кстати, скоро выходит обновление Windows. Что нас ждет в Redstone 5, читайте здесь.
Лайфхаки для работы с Windows:
- Как переустановить Windows и не потерять лицензию?
- Как протестировать новую версию Windows
Фото: компании-производители
Редактор направлений «Мобильные устройства» и «Техника для дома»