Office Update sonrası Excel yavaşlığı & Vbscript ile uzaktan komut çalıştırma/patch kaldırma

vbscript ile uzaktan komut çalıştırma, excel file open slowly on network, network üzerinden excel dosyalarını açarken yavaşlık

28.06.2011 tarihinde çıkan Microsoft Office File Validation güncellemesi yükledikten sonra ağ üzerinden excel dosyalarını açarken aşırı bir yavaşlama ve 2-3Mb boyutundan yüksek olan excel dosyalarında kilitlenme meydana gelmesine yol açmakta. Bilgisayarın lokal disklerinde bulunan dosyalar için bu sorun olmamakla birlikte yanlızca ağ üzerinden çalışan dosyalarda bu sorun ortaya çıkmakta.

Yapılan güncelleme WSUS ortamından kaldırılmayı desteklemediği için elle kaldırmanız gerekmekte 5-10 bilgisayar yapılabilir ancak şirket ortamları için pek mümkün değil.

iş yine script yazmaya kaldı.
Öncelikle nasıl kaldırabileceğimizi registry üzerinden aradığımızda kaldırma stringi olarak
MsiExec.exe /I{90140000-2005-0000-0000-0000000FF1CE} yazmakta kendimize göre düzenlersek MsiExec.exe /quiet /uninstall {90140000-2005-0000-0000-0000000FF1CE} şeklinde interaktif ekran görünmeden otomatik olarak kaldırması sağlanmakta.

Güncelleme: Microsoft tarafında sorun çıktığı teyit edilmiş ilgili adreslere http://support.microsoft.com/kb/2570623/tr ve http://support.microsoft.com/kb/2501584/tr adreslerinden ulaşılabilir. 3 çözüm sunmuşlar şu anlık 1.Kaldırmak  2. Devre dışı bırakmayı, Office 2007 veya 2010 yüklemeyi. İlgili linklerden detaylara ulaşabilirsiniz.

Gelelim Scripte. Okumaya devam et “Office Update sonrası Excel yavaşlığı & Vbscript ile uzaktan komut çalıştırma/patch kaldırma”

Vb.net İle Web Sayfaları üzerinde Get-Post istekleri yapmak ve Excel işlemleri

Vb.net kullanarak threading,get,post ve excel işlemleri

Güzel bir programla/notlarla yeni bir post.

Programın,notların işlemleri;
Vb.net kullanarak Web sayfalarını getirmek veya web sayfalarına değerler post ederek gelen değerleri almak. Alınan verileri excel dosyası oluşturup ilgili sütün/satırlara yazıp biçimlendirmeleri (hücre birleştirme,renklendirme) yapıp kayıt etmek.

Programın yaptıkları;
1-İzmir metro seferlerini www.izmir.bel.tr adresinden Get ile alıp kaynak kodunu temizledikten sonra excele aktarıp kayıt etmek
2-İzmir banliyo seferlerini www.izban.com.tr adresinden alıp kayıt etmek.
3-Vapur seferlerini www.izmir.bel.tr ulaşımdaki vapur alanında bulunan kalkış ve varış comboboxları içerisindeki değerlerin hepsini tek tek post ederek gelen değerlere göre sefer varsa excele atmak
4-Otobüs numaralarını kullanarak www.eshot.gov.tr sitesinden her bir otobüs numarası için güzergah,saatlerini alıp excele kayıt etmek.

Kısaca izmir offline ulaşım rehberi. (21 Ekim 2010)
Okumaya devam et “Vb.net İle Web Sayfaları üzerinde Get-Post istekleri yapmak ve Excel işlemleri”

vb.net ile registry kullanarak Monitör Bilgilerini Görüntülemek

vb.net ile registry kullanarak Monitör Bilgilerini Görüntülemek

Envanter yazılımına bir bölüm daha ekledim. Bilgisayara bağlı olan Monitörün registry üzerinde kayıtlı olan EDID (Extended display identification data) bilgilerinden yararlanarak Serino,model,üretim tarihi,ölçüleri ve kaç inç olduğu gibi bilgilere erişebiliyoruz. Detaylı bilgi için VESA E-EDID™ Implementation Guide ı kullanabilirsiniz.

Imports System.Management
Imports System.Text
Imports Microsoft.Win32
Imports System.Net.NetworkInformation
Public Class Form1
Dim strmodel As String = “”
Dim strmodel2 As String = “”
Dim strserino As String = “”
Dim regedithex As String = “”
Dim struretimhaftasi As String = “”
Dim struretimyili As String = “”
Dim strdikey, stryatay As Integer
Dim strmonitorinc As Double
Private Function ByteArrayToString(ByVal ba As Byte()) As String
Dim hex As New StringBuilder(ba.Length * 2)
For Each b As Byte In ba
hex.AppendFormat(“{0:x2}”, b)
Next
Return hex.ToString()
End Function

Güncelleme: 26 Haziran 2010
Okumaya devam et “vb.net ile registry kullanarak Monitör Bilgilerini Görüntülemek”

vb.net üzerinde telnet uygulaması

Ağ üzerinde gün içerisinde networke dahil olmuş bilgisayarların hangi switchler üzerinden sisteme dahil olduklarını bulmak için yazdığım bir uygulama.

Uygulamanın çalışma mantığı:
Çalıştırıldığı dizinde 2 adet dosyaya ihtiyaç duyuyor ayarlar.ini ve switchler.txt. Switchler.txt switchlerin ip leri yer almakta. ayarlar.ini dosyasında ise switchlerin şifreleri (hepsi ortak olmalı), Çalıştırılacak komut (sh mac-address-table), database bilgileri ve filtreleme, loglama yapılacak mı gibi bilgiler girilmeli.

Loglama yapılacak seçilirse çalıştırıldığı dizinde Log klasörünün içerisine switchlerin konsollarından gelen verileri ve filtreleme sonucu oluşan dosyaların çıktıları yer almakta.

Filtreleme mantığı ise her switch uplink ve downlinkleri üzerinden bir çok kendi üzerinde olmayan mac adresinin database üzerine kayıt edilmesini engellemek için gerekli olan kısım. Benim örneğimde Fa (Fast Ethernet) ve Lo (Long Reach Ethernet) portlarındaki mac adreslerini almak için filtre girilmiş durumda.  En fazla 3 adet filtre için geliştirdim.

Program kısaca Cisco switchlere telnet bağlanıp Fa,Lo portlarındaki bilgilerin alınıp veritabanına kayıt edilmesini sağlıyor. İsterseniz zamanlamayı açıp her 120 saniyede bir tekrar liste almasını ve değişenleri yazmasını sağlayabilirsiniz.

SQL için aşağıdaki alanlara ihtiyaç duyulmakta;

DROP TABLE IF EXISTS `mac`;
CREATE TABLE `mac` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`switch` text,
`mac` text,
`vlanid` text,
`tarama` datetime DEFAULT NULL,
`port` text,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=507 DEFAULT CHARSET=utf8;

VB.Net Telnet Uygulaması (vs2005)

Zip açma şifresi : notsayfam.com

Vb.net remote registry ile bilgisayarın ürün anahtarını bulmak

vb.net kullanarak uzaktaki bilgisayarın ürün anahtarını almak, get remote computer product key using remote registry

vb.net envanter programı için gerekli olabilecek bir parça.
Imports Microsoft.Win32
Public Class Form1
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
MsgBox(GetXPKey(TextBox1.Text))
End Sub
Public Function GetXPKey(ByVal hostorip As String) As String
Dim MyReg As RegistryKey = RegistryKey.OpenRemoteBaseKey(RegistryHive.LocalMachine, hostorip)
Dim MyRegKey As RegistryKey
MyRegKey = MyReg.OpenSubKey("Software\Microsoft\Windows NT\currentVersion", True)
Dim bytDPID() As Byte = MyRegKey.GetValue("DigitalProductID")
MyRegKey.Close()
Dim bytKey(14) As Byte
Array.Copy(bytDPID, 52, bytKey, 0, 15)
Dim strChar As String = "BCDFGHJKMPQRTVWXY2346789"
Dim strKey As String = ""
For j As Integer = 0 To 24
Dim nCur As Short = 0
For i As Integer = 14 To 0 Step -1
nCur = CShort(nCur * 256 Xor bytKey(i))
bytKey(i) = CByte(Int(nCur / 24))
nCur = CShort(nCur Mod 24)
Next
strKey = strChar.Substring(nCur, 1) & strKey
Next
For i As Integer = 4 To 1 Step -1
strKey = strKey.Insert(i * 5, "-")
Next
Return strKey
End Function
End Class

x64 üzerinde Visual Studio ODBC bağlantıları problemi

XP, Vista, Windows7 x64 üzerinde ODBC üzerinden veritabanı bağlantısı yaptıktan sonra

“ERROR [IM014] [Microsoft][ODBC Driver Manager] The specified DSN contains an architecture mismatch”

hatası almamız muhtemel. Sebebi yine ODBC sürücülerinin 32bit sürücü desteğine sahip olması. Her ne kadar ODBC test ettiğimizde başarılı bir şekilde bağlandım dese de vb.net üzerinden bağlantı açılırken yukarıdaki hata mesajını döndürmekte.

Hatayı geçmek için projemizi çalışacağı CPU yu x86 seçmelimiz gerekiyor.

VS2008 üzerinde x86 ayarlanması

Project menüsünden Projemizin özelliklerini açalım.

Compile bölümünü açalım

Advanced Compile Optionsa yarlarını açalım.

Target CPU seçeneğini x86 seçtiğimizde projemiz artık sadece 32bitlik uygulama gibi çalışacak. Yukarıdaki ODBC sorunu kalkacaktır 🙂

VBScript ve WMI kullanarak envanter çıkaralım.

Scriptimiz çalıştırıldığı bilgisayarın envanterini çıkartarak, paylaşıma koyduğumuz mdb dosyası üzerine kayıtı yazıyor. Veritabanına yazdıktan sonra C: dizini altına env.txt isimli dosya oluşturuyor. Aynı bilgisayarda tekrar çalışmaması için ise env.txt dosyasının varlığını kontrol ediyor dosya varsa eğer envanteri çıkartmadan çıkıyor.

Active Directory üzerinden logon script olarak uygulayıp envanter bilgisi toplayabiliriz.

Envanter içeriği,
Network kartları ve ip,dns,gateway,subnetleri.
cdrom, fiziksel disk sürücüler ve partition yapilari, bilgisayara takılı olan ramler vb

'==========================================================================
'
' notsayfam.com
'
'==========================================================================


Option Explicit
dim envanter

envanter = "c:\env.txt"
Const wbemFlagReturnImmediately = &h10
Const wbemFlagForwardOnly = &h20

Dim iCursorType        ' The Cursor Type for the Recordset
Dim iLockType        ' The Lock Type for the Recordset

Dim fso
Set fso = WScript.CreateObject("Scripting.FileSystemObject")

' c:\env.txt dosyasi mevcut degilse envanter cikarilmasini sagliyoruz
if not fso.FileExists(envanter) then

Dim output
Dim wmiService
Dim bilgiler

Dim hostname
Dim islemci
Dim islemcifiziksel
Dim islemcicekirdek

Okumaya devam et “VBScript ve WMI kullanarak envanter çıkaralım.”

Visual Basic :Net ile WMI kullanarak EtkiAlanı/Yerel Donanım envanterimizi almak

Donanım takip yazılımı yazarken aralarda kalmış olan bilgisayar donanımlarının alınması işlemini boş vaktimde tamamladım.

Domain üzerinde bağlantı bilgileri girilerek uzaktaki domain üyesinin envanteri alınabilir.

Programın yapabildikleri.

İşlemci , fiziksel işlemci , mantıksal işlemci adedi
en fazla ram desteği, anakartta kaç slot olduğu, hangi slotlarda hangi mhz ramlerin yer aldığı
Fiziksel diskler, partition yapıları, mantıksal diskler
Cd Sürücüler, tipleri
ekran kartları , ramleri
Yazıcılar, yazıcıların bağlı olduğu port,destekledikleri kağıt boyutları
Paylaşımlar, paylaşımların yolları, paylaşım çeşitleri
Ağ : DNS,IP,Gateway bilgileri
Seri, parallel port sayısı
Bilgisayarın üzerindeki slotlar ve tümleşik kartlar
 

 

Eğer uzaktaki bilgisayarın konfigürasyonunu alırken aşağıdaki hatayı alırsanız

The RPC server is unavailable. (Exception from HRESULT: 0x800706BA)

Client üzerindeki firewall açık durumda olmasından kaynaklanıyor. Client üzerinde aşağıdaki komutları çalıştırarak başarılı bir şekilde konfigürasyonu alabiliriz.

netsh.exe firewall set service type=REMOTEADMIN mode=ENABLE scope=ALL
netsh firewall add portopening protocol=tcp port=135 name=DCOM_TCP135

program kodları yazının devamında

  Okumaya devam et “Visual Basic :Net ile WMI kullanarak EtkiAlanı/Yerel Donanım envanterimizi almak”

vb.net üzerinde registry işlemleri

VB.net üzerinde registry işlemleri
‘ Kullanılabilecek Registry ana dizinleri

CurrentUser Kullanıcı tercihleri ile ilgili bilgi içerir.
LocalMachine Yerel makine konfigürasyonu hakkında bilgi içerir.
ClassesRoot Tipler ve özellikleri hakkında bilgi içerir.
Users Varsayılan kullanıcı hakkında bilgi içerir.
PerformanceData Yazılım performanları ile ilgili bilgi içerir.
CurrentConfig Kullanıcı bağımsız donanım konfigurasyon bilgisi içerir.
DynData Dinamik data bilgisi içerir.

VB.NET    Registry

ClassesRoot HKEY_CLASSES_ROOT    registry anahtarına erişmek için kullanılır.
CurrentConfig HKEY_CURRENT_CONFIG    registry anahtarına erişmek için kullanılır.
CurrentUser HKEY_CURRENT_USER     registry anahtarına erişmek için kullanılır.
DynData HKEY_DYN_DATA     registry anahtarına erişmek için kullanılır.
LocalMachine HKEY_LOCAL_MACHINE     registry anahtarına erişmek için kullanılır.
PerformanceData HKEY_PERFORMANCE_DATA    registry anahtarına erişmek için kullanılır.
Users HKEY_USERS registry anahtarına erişmek için kullanılır.

Okumaya devam et “vb.net üzerinde registry işlemleri”

VB.net LDAP(active directory) üzerinden SID değerini alıp Stringe dönüştürmek

‘SecurityIdentifier için gerekli kütüphane
Imports System.Security.Principal
Imports System.Text
Imports System.DirectoryServices
Private Sub adkullaniciadi_LostFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles adkullaniciadi.LostFocus
sid.Text = “”
Dim objDe As New DirectoryEntry(”LDAP://127.0.0.1¨, “LDAP KULLANICIADI”, “LDAP SIFRE”)
Dim searcher As New DirectorySearcher(objDe)
searcher.Filter = “(&(objectClass=user)(SAMAccountName=” + adkullaniciadi.Text + “))”
searcher.PropertiesToLoad.Add(”objectSid”)
Dim Results As SearchResultCollection = searcher.FindAll()
For Each Result As SearchResult In Results
Dim Rpc As ResultPropertyCollection = Result.Properties
For Each [Property] As String In Rpc.PropertyNames
For Each Value As Object In Rpc([Property])
sid.Text = SIDtoString(Value)
Next
Next
Next
If sid.Text = “” Then
MsgBox(”Active Directory Kullanıcı Adını Kontrol Edin”, MsgBoxStyle.Critical)
End If
End Sub
Public Shared Function SIDtoString(ByVal sidBinary As Byte()) As String
Dim sid As New SecurityIdentifier(sidBinary, 0)
Return sid.ToString()
End Function